Sha*_*kar 37 python dictionary list python-2.7
我有一个python字典
d = {1: 6, 2: 1, 3: 1, 4: 9, 5: 9, 6: 1}
Run Code Online (Sandbox Code Playgroud)
由于上述字典中的值不是唯一的.我想将唯一值的所有键组合为一个列表,并创建一个新的字典,如下所示:
v = {6:[1], 1:[2, 3, 6], 9: [4, 5]}
Run Code Online (Sandbox Code Playgroud)
注意新词典v的键应该排序.我发现很难想象和实现这个字典创建.请建议我一个简单有效的方法来做到这一点.
Mar*_*ers 59
from collections import defaultdict
v = defaultdict(list)
for key, value in sorted(d.iteritems()):
v[value].append(key)
Run Code Online (Sandbox Code Playgroud)
但你也可以用沼泽标准来做到这dict一点:
v = {}
for key, value in sorted(d.iteritems()):
v.setdefault(value, []).append(key)
Run Code Online (Sandbox Code Playgroud)
在Python 3中,请sorted(d.items())改用.
mgi*_*son 14
如果您dict在一天结束时实际上不需要,可以使用itertools.groupby:
from itertools import groupby
from operator import itemgetter
for k,v in groupby( sorted(d.items(),key=itemgetter(1)), itemgetter(1) ):
print k,list(map(itemgetter(0),v))
Run Code Online (Sandbox Code Playgroud)
当然,如果你真的想要,你可以使用它来构造一个字典:
{k:list(map(itemgetter(0),v)) for k,v in groupby( sorted(d.items(),key=itemgetter(1)), itemgetter(1) )}
Run Code Online (Sandbox Code Playgroud)
但在那时,你可能最好使用Martijn的defaultdict解决方案.
| 归档时间: |
|
| 查看次数: |
52923 次 |
| 最近记录: |