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

Can't figure how to stop dictionary keys from overwriting themselves

我正在尝试创建字典,但我的字典键不断覆盖自己。我不明白我该如何处理这个问题。

这是脚本:

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] = charges(例如,charge_dict['MET']['CA'] = 0.32198)。

你能帮我解决这个问题吗?

没有真正看到完整的问题描述,我的猜测是你的最终结果是每个 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) 被调用时,一个新的字典会自动 spring 存在。