首页 > 解决方案 > 在 Python 中反转字典

问题描述

这是一个反转字典的代码,但是为了理解定义的函数 invert_dict(dic) 中每个代码元素的作用,我遇到了一些麻烦,如果有人把它分解给我并向我解释,那就太好了每个元素的使命。谢谢你。

animals = {'Lion':["meet", 1.2 ,'yellow'],'Cat':["milk", 0.3,'white'],'dog':["Dog", 1,'black']}

def invert_dict(dic):
    return {v: d.setdefault(v, []).append(k) or d[v] for d in ({},) for k in dic for v in dic[k]}

print(invert_dict(animals))

输出:

{'meet': ['Lion'], 1.2: ['Lion'], 'yellow': ['Lion'], 'milk': ['Cat'], 0.3: ['Cat'], 'white': ['Cat'], 'Dog': ['dog'], 1: ['dog'], 'black': ['dog']}

标签: pythondictionary

解决方案


听起来像一个经典的用途defaultdict

animals = {'Lion':["meet", 1.2 ,'yellow'],'Cat':["milk", 0.3,'white'],'dog':["Dog", 1,'black']}

from collections import defaultdict
def invert_dict(d):
    ret = defaultdict(list)
    d = [(v,k) for k, lst in d.items() for v in lst]
    for k,v in d.items():
        ret[k].append(v)
    return dict(ret)

推荐阅读