在不使用setdefault的情况下在python中反转字典

2024-10-04 07:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:给定一个字典(每个键都有列表作为值!)在不使用setdefault的情况下反转它!您可以假设字典不是空的,并且每个值都表示为列表

我知道这里已经有答案了!但他们使用了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])

Tags: and答案in列表for字典情况bob
3条回答

您可以通过执行嵌套列表和听写理解来实现这一点。我是这样做的:

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

调用此函数,将orig_dict作为参数传递,将输出以下结果:

{'harry potter': ['yossi', 'adam'], 'lilo and stich': ['yossi'], 'catch-22': ['adam']}

(注意没有“bob”,因为在原始词典中没有)


    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']}

'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']}

相关问题 更多 >