如何将Python字典
我需要反转一个字典,其中的值应成为另一个字典的键,并且这些值应以列表中的键出现,即按排序顺序。
d = {1:10, 2:20, 3:30, 4:30}
转换为{10: [1], 20: [2], 30: [3, 4]}
?我需要反转一个字典,其中的值应成为另一个字典的键,并且这些值应以列表中的键出现,即按排序顺序。
d = {1:10, 2:20, 3:30, 4:30}
转换为{10: [1], 20: [2], 30: [3, 4]}
?将Python字典中的键和值反转有点棘手。您应该知道Python字典必须具有唯一的键。
因此,如果您知道当反转当前字典的键和值时将具有唯一键,则可以使用简单的字典推导式
,例如:
{v:k for k,v in my_dict.items()}
itertools
模块中的 groupby
来实现: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]}
>>> 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方法更简单、更快。此外,它返回的是字典子类而不是普通字典:
>>> e = defaultdict(list)
>>> for x, y in d.items():
e[y].append(x)
>>> e
defaultdict(<class 'list'>, {30: [3, 4], 10: [1], 20: [2]})
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]}
d = {1:10, 2:20, 3:30, 4:30}
inv = {}
for key, val in d.iteritems():
inv[val] = inv.get(val, []) + [key]