在Python中将列表分组到字典

时间:2016-10-25 08:33:38

标签: python itertools

给出清单

l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)]

如何获取字典

{'a': [1, 1, 2], 'c': [5], 'b': [2, 3]}
在Python中

编辑:我正在寻找功能性解决方案(仅使用1个表达式)。

4 个答案:

答案 0 :(得分:4)

您可以使用collections.defaultdict()。或者,如果您不想导入collections,您可以使用dict.setdefault()作为普通字典获得相同的行为:

>>> my_dict = {}
>>> l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)]
>>> for k, v in l:
...     my_dict.setdefault(k, []).append(v)
...
>>> my_dict
{'a': [1, 1, 2], 'c': [5], 'b': [2, 3]}

答案 1 :(得分:0)

定义后

from itertools import *

def group(iterable, key, value = lambda x: x):
    return dict((k, list(map(value, values))) for k, values in groupby(sorted(iterable, key = key), key))

使用group(l, key = lambda x: x[0], value = lambda x: x[1]))

答案 2 :(得分:0)

使用collections模块中的defaultdict。 您可以迭代列表并从列表中的元组中提取(键,值)对并构建字典。

from collections import defaultdict

l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)]

def dict_my_list(lst):
    d = defaultdict(list)
    for key, value in lst:
        d[key].append(value)
    return d

print dict_my_list(l)  # {'a': [1, 1, 2], 'c': [5], 'b': [2, 3]}

答案 3 :(得分:0)

以下是使用dict()

解决问题的简单方法
l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)]
ll = dict()
for key,value in l:
    if key in ll:
        ll[key].append(value)
    else:
        ll[key] = list()
        ll[key].append(value)

print ll  # {'a': [1, 1, 2], 'c': [5], 'b': [2, 3]}