动态词典Python

时间:2013-05-19 17:18:56

标签: python dictionary

我想在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}

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

3 个答案:

答案 0 :(得分: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理解:

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

答案 1 :(得分: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)]

答案 2 :(得分: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作为很好的模块。

修改 re: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))