python - 如何重新配置此字典以更改其键
问题描述
假设我有这本字典:
>>> dic = {('a', 'l'):3, ('a', 'p'):2, ('b', 'l'):4, ('b', 'p'):1}
我怎样才能编辑它,所以我可以像这样拥有它:
>>> dic_new = {'a':{'l':3, 'p':2}, 'b':{'l':4, 'p':1}}
每当我更改密钥时,都会出现错误。我很困惑。
解决方案
在每种情况下,您都希望设置d2[k1][k2]=v
您拥有的任何位置d1[k1,k2]=v
。最简单的方法是从 defaultdict 开始。
>>> from collections import defaultdict
>>> d1 = {('a', 'l'):3, ('a', 'p'):2, ('b', 'l'):4, ('b', 'p'):1}
>>> d2 = defaultdict(dict)
>>> for k1, k2 in d1:
... d2[k1][k2] = d[k1,k2]
...
>>> d2
defaultdict(<class 'dict'>, {'a': {'l': 3, 'p': 2}, 'b': {'l': 4, 'p': 1}})
>>> dict(d2)
{'a': {'l': 3, 'p': 2}, 'b': {'l': 4, 'p': 1}}
如果您不想使用 a defaultdict
,请使用该setdefault
方法。
d2 = {}
for k1, k2 in d1:
d2.setdefault(k1, {})[k2] = d1[k1,k2]
推荐阅读
- perl - 提供静态文件的文档
- flutter - 使用颤振绘制路径时出现奇怪的性能问题
- c# - Extracting RabbitMQ functionality to separate class
- python - 如何将python添加到系统路径?
- android - (Android) 如何在给定每个设备的 IP 地址的情况下通过互联网建立对等连接
- java - JFileChooser 设置目录
- xamarin - Xamarin.Forms 列表通过对象列表控制
- python - 如何将列名排序到 Pandas Dataframe(分类数据)中的 bin 中
- scala - 为什么包含多行的三引号字符串在Scala工作表的行尾有//n
- javascript - 如何使用谷歌应用脚本从我的谷歌驱动器获取我是所有者的所有文件