0

我想在 Python 中创建一个字典字典:

假设我已经有一个包含键的列表:

keys = ['a', 'b', 'c', 'd', 'e']
value = [1, 2, 3, 4, 5]

假设我有一个带有数值的数据字段(其中 20 个)

我想定义一个字典,它存储 4 个不同的字典,给定一个对应的值

for i in range(0, 3)
   for j in range(0, 4)
     dictionary[i] = { 'keys[j]' : value[j] }

所以基本上,它应该是这样的:

dictionary[0] = {'a' : 1, 'b' : 2, 'c' : 3, 'd': 4, 'e':5}
dictionary[1] = {'a' : 1, 'b' : 2, 'c' : 3, 'd': 4, 'e':5}
dictionary[2] = {'a' : 1, 'b' : 2, 'c' : 3, 'd': 4, 'e':5}
dictionary[3] = {'a' : 1, 'b' : 2, 'c' : 3, 'd': 4, 'e':5}

实现这一目标的最佳方法是什么?

4

3 回答 3

3

使用列表理解并dict(zip(keys,value))为您返回字典。

>>> keys = ['a', 'b', 'c', 'd', 'e']
>>> value = [1, 2, 3, 4, 5]
>>> dictionary = [dict(zip(keys,value)) for _ in xrange(4)]
>>> from pprint import pprint
>>> pprint(dictionary)
[{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}]

如果你想要一个 dicts 的 dict 然后使用一个 dict 理解:

>>> keys = ['a', 'b', 'c', 'd', 'e']
>>> value = [1, 2, 3, 4, 5]
>>> dictionary = {i: dict(zip(keys,value)) for i in xrange(4)}
>>> pprint(dictionary)
{0: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
 1: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
 2: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
 3: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}}
于 2013-05-19T17:21:03.400 回答
1

仅压缩一次的替代方案...:

from itertools import repeat
map(dict, repeat(zip(keys,values), 4))

或者,也许,只使用dict.copy并构造dict一次:

[d.copy() for d in repeat(dict(zip(keys, values)), 4)]
于 2013-05-19T17:41:59.000 回答
0

对于字典列表:

dictionary = [dict(zip(keys,value)) for i in xrange(4)]

如果你真的想要一本字典,就像你说的:

dictionary = dict((i,dict(zip(keys,value))) for i in xrange(4))

我想您可以使用列表中无法使用的 pop 或其他 dict 调用

顺便说一句:如果这真的是一个数据/数字处理应用程序,我建议继续使用 numpy 和/或 pandas 作为很棒的模块。

编辑 回复:OP 评论, 如果您想要您正在谈论的数据类型的索引:

# dict keys must be tuples and not lists
[(i,j) for i in xrange(4) for j in range(3)]
# same can come from itertools.product
from itertools import product
list(product(xrange4, xrange 3))
于 2013-05-19T17:32:46.860 回答