2

..更好的解决方案。

我有以下 3 个列表

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

1 回答 1

3

关于什么:

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)]

回复:较慢 - 我试图简单地对其进行基准测试:

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:最快的方法(恕我直言也是最简单的)是:

d = [{'address': j, 'id': l, 'names': n} for j, l, n in izip(a, b, c)]

给 0.23 秒。

于 2013-09-06T08:01:37.633 回答