簡體   English   中英

是否可以使用字典理解來反轉python中的字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM