Python用值列表填充dict

时间:2014-08-29 08:26:05

标签: python arrays list dictionary

我正在寻找一种简单的方法将给定数组的所有元素作为值放在字典中。

目前它看起来像这样:

    for i, e in enumerate(list):
        passiv_dict = {
            "key1": [list[i][0]],
            "key2": [list[i][1]],
        }

5 个答案:

答案 0 :(得分:3)

使用列表推导(以python 2.7为例)

l = range(3)
d = {i:e for i,e in enumerate(l)}

答案 1 :(得分:1)

可能你想要这样的东西,

my_dict = dict(('key{}'.format(index), val) for index, val in enumerate(range(3)))

打印my_dict将为您提供这样的字典,

{'key0': 0, 'key1': 1, 'key2': 2}

在这里,您需要传递列表而不是range(3)

答案 2 :(得分:0)

目前,您正在为每个元素创建一个新字典。您需要创建dict然后添加到它。

这样的东西
passive_dict = {}
for i, e in enumerate(list):
    passive_dict[i] = e

答案 3 :(得分:0)

字典可以从一系列元组构造,这是enumerate产生的:

l = range(3)
d = dict(enumerate(l))

答案 4 :(得分:0)

从您的描述中了解您所寻找的内容并不十分清楚。但是,根据您的示例代码,我假设您的基本列表是这样的:

l = [['apple', 'red'],['pear','green'],['lemon','yellow']]

dict构造函数的简单调用将导致:

>>> dict(l)
{'lemon': 'yellow', 'pear': 'green', 'apple': 'red'}

为匹配(?)您的预期输出格式,我们可能会尝试:

>>> {key:item for key, item in enumerate(l)}
{0: ['apple', 'red'], 1: ['pear', 'green'], 2: ['lemon', 'yellow']}

或者这个微小的变化:

>>> {"key{}".format(key):item for key, item in enumerate(l)}
{'key2': ['lemon', 'yellow'], 'key1': ['pear', 'green'], 'key0': ['apple', 'red']}

但是,也许您需要这个(次优)表示:

>>> [{idx:val for idx,val in enumerate(item)} for item in l]
[{0: 'apple', 1: 'red'}, {0: 'pear', 1: 'green'}, {0: 'lemon', 1: 'yellow'}]

或者:

>>> [{"key{}".format(idx):val for idx,val in enumerate(item)} for item in l]
[{'key1': 'red', 'key0': 'apple'}, {'key1': 'green', 'key0': 'pear'}, {'key1': 'yellow', 'key0': 'lemon'}]

(不要过多关注按键顺序,因为字典已订购)。


最后,如果您需要任意标签,请使用以下技术:

>>> labels={0: 'fruit',1: 'color'}
>>> [{labels[idx]:val for idx,val in enumerate(item)} for item in l]
[{'color': 'red', 'fruit': 'apple'}, {'color': 'green', 'fruit': 'pear'}, {'color': 'yellow', 'fruit': 'lemon'}]

通过所有这些变化,您可以使用基本的构建块来完成您想要的任何操作。有关词典理解的正式介绍,请查看PEP-274