给出清单
l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)]
如何获取字典
{'a': [1, 1, 2], 'c': [5], 'b': [2, 3]}
在Python中?
编辑:我正在寻找功能性解决方案(仅使用1个表达式)。
答案 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]}