从两个列表构建字典

时间:2015-12-03 19:24:38

标签: python list python-3.x dictionary

我有两个列表,如下所示(长度相等)

cities = ['New York','Tokyo','Moscow','London']
altitudes = ['13000','12000','11000','9000']

我想构建一个字典如下

mydict = {x : y for x in cities and y in altitudes}

我的python解释器说的语法无效。为什么这个无效?我该怎么做?

4 个答案:

答案 0 :(得分:4)

mydict = dict(zip(cities, altitudes))

答案 1 :(得分:2)

thing = {city:altitude for city, altitude in zip(cities, altitudes)}

理解期望单个可迭代(列表等)循环。因此,要解决此问题,首先需要将两个列表转换为单个列表,然后将该列表提供给将其转换为dict的理解。

稍微拉开上面一行,你首先使用python' s zip来聚合元素

list_of_tuples = zip(cities, altitudes)

然后你把它转换成dict:

thing = {city: alt for city, alt in list_of_tuples}

或更简单

thing = dict(list_of_tuples)

答案 2 :(得分:1)

你真正想要的是

mydict = dict(zip(cities, altitudes))

执行嵌套循环会给你错误的结果,因为它将迭代两个列表的笛卡尔积,如下所示:

>>> [ (c,a) for c in cities for a in altitudes ]
[('New York', '13000'), ('New York', '12000'), ('New York', '11000'), ('New York', '9000'), ('Tokyo', '13000'), ('Tokyo', '12000'), ('Tokyo', '11000'), ('Tokyo', '9000'), ('Moscow', '13000'), ('Moscow', '12000'), ('Moscow', '11000'), ('Moscow', '9000'), ('London', '13000'), ('London', '12000'), ('London', '11000'), ('London', '9000')]

答案 3 :(得分:0)

cities = ['New York','Tokyo','Moscow','London']
altitudes = ['13000','12000','11000','9000']
print dict(i for i in zip(cities,altitudes))

你可以使用它来完成它。

相关问题