How to convert a python dictionary
d = {1:10, 2:20, 3:30, 4:30}
to {10: [1], 20: [2], 30: [3, 4]}
?
我需要反转字典,值应该成为另一个字典的键,值应该是列表中的键,即也在排序的事物中。
反转 python 字典中的键和值有点棘手。你应该记住,python 字典必须有一个
unique
键。
所以,如果你知道在反转当前字典的键和值时会有一个唯一的键,你可以使用一个简单的
dict comprehension
,就像这个例子:
{v:k for k,v in my_dict.items()}
但是,您可以使用
groupby
模块中的 itertools
就像这个例子:
from itertools import groupby
a = {1:10, 2:20, 3:30, 4:30}
b = {k: [j for j, _ in list(v)] for k, v in groupby(a.items(), lambda x: x[1])}
print(b)
>>> {10: [1], 20: [2], 30: [3, 4]}
这个用例很容易通过dict.setdefault()
处理>>> d = {1:10, 2:20, 3:30, 4:30}
>>> e = {}
>>> for x, y in d.items():
e.setdefault(y, []).append(x)
>>> e
{10: [1], 20: [2], 30: [3, 4]}
另一种方法是使用 collections.defaultdict。这有一个稍微复杂的设置,但内部循环访问比 setdefault 方法更简单和更快。此外,它返回一个 dict 子类而不是一个普通的 dict:
>>> e = defaultdict(list)
>>> for x, y in d.items():
e[y].append(x)
>>> e
defaultdict(<class 'list'>, {30: [3, 4], 10: [1], 20: [2]})
d = {1:10, 2:20, 3:30, 4:30}
inv = {}
for key, val in d.iteritems():
inv[val] = inv.get(val, []) + [key]
试试这个!
o = {}
for k,v in d.iteritems():
if v in o:
o[v].append(k)
else:
o[v] = [k]
o = {10: [1], 20: [2], 30: [3, 4]}