是否可以使用字典理解来反转python中的字典

问题描述 投票:0回答:5

我想使用字典理解来反转字典key, value对,但如果新字典对于一个键有多个值,那么它将被替换为最后一个值。

如果使用理解重复键,是否可以附加到新词典中的值?

输入:

test_di = {'a':'1', 'b':'2', 'c':'3', 'd':'2'}

码:

{v:k for k,v in test_di.items()} 

输出此代码:

{'1': 'a', '3': 'c', '2': 'd'}

期望的输出:

{'1': ['a'], '3': ['c'], '2': ['b','d']}
python dictionary dictionary-comprehension
5个回答
7
投票

用字典理解以合理的方式(即O(N)时间)不可能做到这一点。理解根本无法处理重复的值。

但是,定期循环很容易:

d = {}
for key, value in old_d.items():
    d.setdefault(value, []).append(key)

1
投票

defaultdict将是最有效的方法:

from collections import defaultdict

test_di = {'a':'1', 'b':'2', 'c':'3', 'd':'2'}

d = defaultdict(list)
for v,k in test_di.items():
    d[k].append(v)

print(d)

0
投票

您的问题很混乱,但听起来您希望将多个值存储在字典中的单个键上。

这是不可能的,您可能希望查看存储列表字典。


0
投票

您可以使用OrderedDict并反转键。正常的dict不跟踪键的顺序。

from collections import OrderedDict

dict1 = OrderedDict([('Name', 'Jon'), ('Race', 'Latino'), ('Job', 'Nurse')])
reversed_dict1 = OrderedDict([(key, dict1.get(key)) for key in reversed(dict1)])

0
投票

是的,它是可能的(但它不是最有效的解决方案):

d = {'a':'1', 'b':'2', 'c':'3', 'd':'2'}

{v1: [k1 for k1, v2 in d.items() if v1 == v2] for v1 in d.values()}
# {'1': ['a'], '2': ['b', 'd'], '3': ['c']}
© www.soinside.com 2019 - 2024. All rights reserved.