不知道如何阻止字典键覆盖自己
Posted
技术标签:
【中文标题】不知道如何阻止字典键覆盖自己【英文标题】:Can't figure how to stop dictionary keys from overwriting themselves 【发布时间】:2022-01-17 01:00:26 【问题描述】:我正在尝试创建字典,但我的字典键不断覆盖自己。我不明白我该如何处理这个问题。
这是脚本:
import MDAnalysis as mda
u = mda.Universe('rps5.prmtop', 'rps5.inpcrd')
ca = u.select_atoms('protein')
charges = ca.charges
atom_types = ca.names
resnames = ca.resnames
charge_dict =
for i in range(len(charges)):
#print(i+1 ,resnames[i], atom_types[i], charges[i])
charge_dict[resnames[i]] =
charge_dict[resnames[i]][atom_types[i]] = charges[i]
print(charge_dict)
charges、atom_types 和 resnames 都是列表,具有相同数量的元素。
我希望我的字典看起来像这样:charge_dict[resname][atom_types] = charge (charge_dict['MET']['CA'] = 0.32198,例如)。
你能帮我解决这个问题吗?
【问题讨论】:
重命名是否包含重复条目? 【参考方案1】:实际上没有看到完整的问题描述,我猜你的最终结果是每个charge_dict[name]
都是一个只有一个键的字典。那不是因为键“覆盖自己”。您的程序会明确覆盖它们:charge_dict[resnames[i]] =
。
您想要的是仅重置该键的值(如果尚未设置)。您可以通过首先测试 if resnames[i] not in charge_dict:
轻松做到这一点,但 Python 标准库提供了一个更简单的机制:collections.defaultdict
。 defaultdict
是具有关联默认值创建者的字典。因此,您可以执行以下操作:
from collections import defaultdict
charge_dict = defaultdict(dict)
之后,您无需担心初始化charge_dict[name]
,因为在调用默认值函数 (dict
) 时会自动生成一个新字典。
【讨论】:
以上是关于不知道如何阻止字典键覆盖自己的主要内容,如果未能解决你的问题,请参考以下文章
前端javascript如何阻止按下退格键页面回退 但 不阻止文本框使用退格键删除文本
如何阻止鼠标中键单击取消选择 QGraphicsScene 中的项目而不阻止它与场景中的项目相结合?
如何阻止 MacOS 更新覆盖我的 auto_master 文件? [关闭]