python - 在 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']}
解决方案
听起来像一个经典的用途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)
推荐阅读
- html - SCSS 变量不显示在前端
- arrays - 仍在构建模式下改变数组状态
- sql - 在 select 语句中使用聚合时如何分组
- git - 管理不同的数据库版本或根据git分支版本更改数据库,向后兼容
- spring-boot - 为什么 hikari 连接池在接收同时多个请求时只使用 1 或 2 个连接?
- php - 未定义索引:在第 29 行的 C:\xampp\htdocs\index.php 中提交
- swift - PDFAnnotation 单选按钮不改变背景颜色或不显示值
- jmeter - 在 JMeter 中同步来自不同线程组的线程
- maven - 如何使用 cucumber jvm 4.4.0 在没有 com.github.temyers 的情况下在功能或场景级别并行运行 Cucumber 测试?
- c++ - 错误:数字常量之前的预期非限定 ID:std::array 和 std::vector 大小分配