我有一个python字典
d = {1: 6, 2: 1, 3: 1, 4: 9, 5: 9, 6: 1}
由于上述字典中的值不是唯一的。我想将唯一值的所有键组合为一个列表,并创建一个新的字典,如下所示:
v = {6:[1], 1:[2, 3, 6], 9: [4, 5]}
请注意新词典 v 的键应排序。我发现很难想象和实现这个字典创建。请建议我一种简单有效的方法。
答案 0 :(得分:48)
from collections import defaultdict
v = defaultdict(list)
for key, value in sorted(d.iteritems()):
v[value].append(key)
但您也可以使用沼泽标准dict
:
v = {}
for key, value in sorted(d.iteritems()):
v.setdefault(value, []).append(key)
在Python 3中,改为使用sorted(d.items())
。
答案 1 :(得分:13)
如果您在一天结束时实际上不需要dict
,则可以使用itertools.groupby
:
from itertools import groupby
from operator import itemgetter
for k,v in groupby(sorted(d.items()),key=itemgetter(0)):
print k,list(v)
当然,如果你真的想要,你可以用它来构建一个字典:
{k:list(v) for k,v in groupby(sorted(d.items()),key=itemgetter(0))}
但在那时,你可能最好使用Martijn的defaultdict解决方案。