不知道如何阻止字典键覆盖自己

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)

chargesatom_typesresnames 都是列表,具有相同数量的元素。

我希望我的字典看起来像这样: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.defaultdictdefaultdict 是具有关联默认值创建者的字典。因此,您可以执行以下操作:

from collections import defaultdict
charge_dict = defaultdict(dict)

之后,您无需担心初始化charge_dict[name],因为在调用默认值函数 (dict) 时会自动生成一个新字典。

【讨论】:

以上是关于不知道如何阻止字典键覆盖自己的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 PyCharm 覆盖绘图?

前端javascript如何阻止按下退格键页面回退 但 不阻止文本框使用退格键删除文本

如何阻止鼠标中键单击取消选择 QGraphicsScene 中的项目而不阻止它与场景中的项目相结合?

如何阻止 MacOS 更新覆盖我的 auto_master 文件? [关闭]

使用Xcode / Swift或独角兽精灵灰尘在iPad上覆盖(阻止)或关闭iOS

如何阻止记录在关闭时被覆盖