[英]is it possible to reverse a dictionary in python using dictionary comprehension
我想使用字典理解来反转字典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']}
字典理解不可能以合理的方式(即O(N)
时间)完成。 理解根本无法处理重复的值。
但是,使用常规循环非常容易:
d = {}
for key, value in old_d.items():
d.setdefault(value, []).append(key)
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)
您的问题令人困惑,但是听起来您想在字典中的单个键上存储多个值。
这是不可能的,您可能希望查看存储列表的字典。
您可以使用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)])
是的 ,有可能(但是这不是最有效的解决方案):
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']}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.