[英]Inverting dictionary in python without using setdefault
問題:給定一個字典(每個鍵都有列表作為值。)在不使用 setdefault 的情況下反轉它! 您可以假設字典不是空的,並且每個值都表示為列表。
我知道 stackoverflow 中已經有答案了。 但他們使用了 setdefault 和其他導入...
例子:
原始字典:
{"yossi":["harry potter", "lilo and stich"], "adam":["harry potter","catch-22"]}
反轉字典:
{"harry potter":["adam","Bob"], "lilo and stich":["Bob"], "catch-22":["adam"]}
到目前為止我有這個代碼......
def invert_dol(d):
return dict((v, k) for k in d for v in d[k])
orig_dict = {"yossi":["harry potter", "lilo and stich"], "adam":["harry potter","catch-22"]}
inverted_dict = dict()
for k, v in orig_dict.items():
for item in v:
if item not in inverted_dict:
inverted_dict[item]=[k]
else:
inverted_dict[item].append(k)
print(inverted_dict)
# {'harry potter': ['yossi', 'adam'], 'lilo and stich': ['yossi'], 'catch-22': ['adam']}
您可以通過執行一些嵌套列表和字典理解來實現這一點。 我是這樣設計的:
orig_dict = {'yossi': ['harry potter', 'lilo and stich'], 'adam': ['harry potter', 'catch-22']}
def invert_dol(d):
inverted_dict = {movie: [name for name, list_ in d.items() if movie in list_] \
for k, v in d.items() for movie in v}
return inverted_dict
調用此 function,將orig_dict
作為參數傳遞,輸出如下:
{'harry potter': ['yossi', 'adam'], 'lilo and stich': ['yossi'], 'catch-22': ['adam']}
(請注意,沒有“bob”,因為在 orig_dict 中沒有)
'Bob
”從何而來?
>>> {
fave: [name for name in orig_dict.keys() if fave in orig_dict[name]]
for faves in orig_dict.values() for fave in faves
}
{'harry potter': ['yossi', 'adam'], 'lilo and stich': ['yossi'], 'catch-22': ['adam']}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.