Python 从3个列表中列出字典,其中每个列表数据都是字典中的关键数据

Python 从3个列表中列出字典,其中每个列表数据都是字典中的关键数据,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,…更好的解决方案 我有以下三个清单 a = [1, 2, 3] b = ['a', 'b', 'c'] c = ['aa', 'bb', 'cc'] 我需要从中的这些列表中创建一个字典列表,如下所示: [{'address': 'aa', 'id': 1, 'name': 'a'}, {'address': 'bb', 'id': 2, 'name': 'b' }, {'address': 'cc', 'id': 3, 'name': 'c'}] 我用下面的代码完成了这项工作。我很想知道有没

…更好的解决方案

我有以下三个清单

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = ['aa', 'bb', 'cc']
我需要从中的这些列表中创建一个字典列表,如下所示:

[{'address': 'aa', 'id': 1, 'name': 'a'}, {'address': 'bb', 'id': 2, 'name': 'b'
}, {'address': 'cc', 'id': 3, 'name': 'c'}]
我用下面的代码完成了这项工作。我很想知道有没有更好的方法

>>> d = [dict(zip(['id', 'name', 'address'], i)) for i in zip(a, b, c)]
>>> d
[{'address': 'aa', 'id': 1, 'name': 'a'}, {'address': 'bb', 'id': 2, 'name': 'b'
}, {'address': 'cc', 'id': 3, 'name': 'c'}]
那么:

from itertools import izip, repeat

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = ['aa', 'bb', 'cc']

addresses = repeat('address')
ids = repeat('id')
names = repeat('names')

d = [dict(((i, j), (k, l), (m, n))) for i, j, k, l, m, n in izip(addresses, a, ids, b, names, c)]
Re:慢一点-我试着简单地对它进行基准测试:

from time import time
t = time()
for i in xrange(100000):
    d = [dict(((i, j), (k, l), (m, n))) for i, j, k, l, m, n in izip(addresses, a, ids, b, names, c)]
print time() - t
给出0.68秒,OP的方式给出0.81秒

Re 2:最快的方法(也是最简单的方法)是:


给你0.23秒。

+你自己的答案:)属于-你可能会在那里得到更多反馈:)我不知道。这比原来的解决方案更复杂、更慢、更难阅读。只需定义一个新的元组/列表,而不是使用
repeat
:keys=('id','name','address'),代码简化为:
[dict(izip(keys,x))for x in izip(a,b,c)]
你说得对,它并不慢。我只是自己计时(正确的方式,使用
timeit.timeit()
和正确的设置/语句分隔),您的版本更快。在OP的版本中使用
izip
而不是
zip
时,大部分速度提升都消失了,尽管仍然存在速度优势。
d = [{'address': j, 'id': l, 'names': n} for j, l, n in izip(a, b, c)]