簡體   English   中英

在不使用 setdefault 的情況下反轉 python 中的字典

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

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