如何从特定的python列表创建一个dict

时间:2013-07-16 20:56:14

标签: python

我有一个python列表:

[('Three', 8), ('Nine', 9), ('Two', 4), ('Two', 5), ('One', 0), ('One', 1), ('One', 6)]

我想创建一个python字典:

{ 'One', [0,1,6], 'Two':[4,5], 'Three':[8], 'Nine':[9] }

如何使用列表理解来完成此操作?我尝试使用属于相同字符串值的数字创建列表,但我不知道如何在列表推导中即时创建列表。

3 个答案:

答案 0 :(得分:6)

只需使用常规for循环:

from collections import defaultdict

d = defaultdict(list)

for key, value in your_list:
    d[key].append(value)

答案 1 :(得分:1)

我会使用defaultdict但如果您真的想要理解,可以试试

{k : [v for kk, v in l if k == kk] for k in set(i for i, _ in l)}
{'Nine': [9], 'One': [0, 1, 6], 'Three': [8], 'Two': [4, 5]}

出于效率和可读性的原因,我不推荐它。

答案 2 :(得分:0)

>>> from operator import itemgetter as get
>>> from itertools import groupby as gb
>>> l = [('Three', 8), ('Nine', 9), ('Two', 4), ('Two', 5), ('One', 0), ('One', 1), ('One', 6)]

>>> {k: zip(*list(v))[1] for k,v in gb(sorted(l), get(0))}
{'Two': (4, 5), 'Nine': (9,), 'Three': (8,), 'One': (0, 1, 6)}