簡體   English   中英

從列表創建字典

[英]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 因此,您的mapnational_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM