[英]create dictionary from list
我正在嘗試使用map函數創建一個包含兩個列表的字典。 但是有些事情似乎不對。
我知道已經有zip和dict可以完成這項工作,但是我想知道為什么這段代碼出錯了,在哪里。
country = ['India', 'Pakistan', 'Nepal', 'Bhutan', 'China', 'Bangladesh']
capital = ['New Delhi', 'Islamabad','Kathmandu', 'Thimphu', 'Beijing',
'Dhaka']
country_capital={}
def mydict(x,y):
country_capital[x]=y
return country_capital
national_info=map(mydict,country,capital)
print (list(national_info))
為什么打印如下:
[{'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}]
我想要這樣:
[{'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}]
dict
接受兩個元素的可迭代對象,因此您需要發出的所有內容是
country_capital = dict(zip(country, capital))
(由於某種原因,您的預期結果將這本詞典包裝在一個元素列表中。我看不出這樣做的任何理由。)
這里的人們建議了一種更干凈的方法來解決您的問題(問題中提到的一種您知道的方法)。
關於您的問題:
為什么打印如下:
[{'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}, {'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China':
'Beijing', 'Bangladesh': 'Dhaka'}]
map
方法將函數應用於列表的每個元素,並將返回值收集到新列表中。
您的函數返回添加元素的全局變量country_capital
。 因此,您的map
( national_info
)的輸出是一個帶有n
指向country_capital
指針的列表。
如果您將輸出country_capital
而不是national_info
,則將獲得所需的輸出。
country = ['India', 'Pakistan', 'Nepal', 'Bhutan', 'China', 'Bangladesh']
capital = ['New Delhi', 'Islamabad','Kathmandu', 'Thimphu', 'Beijing', 'Dhaka']
d = dict(zip(country, capital )) #{i:v for i, v in zip(country, capital )}
print d
結果 :
{'Pakistan': 'Islamabad', 'Bangladesh': 'Dhaka', 'Bhutan': 'Thimphu', 'Nepal': 'Kathmandu', 'India': 'New Delhi', 'China': 'Beijing'}
您可以map()
(country, capital)
map()
元組,然后包裝dict
以得到最終的字典:
>>> country = ['India', 'Pakistan', 'Nepal', 'Bhutan', 'China', 'Bangladesh']
>>> capital = ['New Delhi', 'Islamabad','Kathmandu', 'Thimphu', 'Beijing', 'Dhaka']
>>> dict(map(lambda x, y: (x, y), country, capital))
{'India': 'New Delhi', 'Pakistan': 'Islamabad', 'Nepal': 'Kathmandu', 'Bhutan': 'Thimphu', 'China': 'Beijing', 'Bangladesh': 'Dhaka'}
所有給出的答案將為您提供所需的結果。 但是,使用編寫的代碼永遠無法獲得所需的結果。 應用map
后的結果輸出列表的元素數始終等於給定列表中的元素數。 由於您要更改相同的全局字典,因此每次返回該字典都會發送相同字典的引用。
您可以嘗試如下操作:
print({i[0]:i[1] for i in zip(country,capital)})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.