从列表中创建字典

时间:2018-01-15 11:13:53

标签: python python-3.x

我正在尝试使用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'}]

6 个答案:

答案 0 :(得分:2)

dict接受一个可迭代的两元素迭代,所以你需要发出的只是

country_capital = dict(zip(country, capital))

(由于某种原因,您的预期结果将此字典包装在单元素列表中。我认为没有任何理由这样做。)

答案 1 :(得分:2)

这里的人们提出了更清洁的方法来解决您的问题(您在问题中提到的一种方式)。

关于你的问题:

  

为什么打印如下:

[{'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,那么您将获得所需的输出。

答案 2 :(得分:0)

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'}

答案 3 :(得分:0)

你可以map() (country, capital)元组,然后用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'}

答案 4 :(得分:0)

所有给出的答案将为您提供所需的结果。但是,您永远无法使用您编写的代码获得所需的结果。 应用map后的结果输出列表始终具有等于给定列表中元素数量的元素数。当您更改相同的全局字典时,每次返回它都会发送相同字典的引用。

答案 5 :(得分:0)

您可以尝试这样的事情:

print({i[0]:i[1] for i in zip(country,capital)})