初始化多个Python字典为相同的键名和值

1 投票
3 回答
6911 浏览
提问于 2025-04-18 09:42

我想在我的主函数中循环遍历,并把某些值放到这些字典的特定键里。这六个字典的键名是一样的,但每个字典的内容都是独特的。有没有更好的方法来 1. 初始化所有字典(比如用字典推导)或者 2. 以更好的方式存储这些数据(比如嵌套字典、命名元组等)

这是我现在的字典初始化方式:

TRI_1 = {'HF' : 0, 'NHF' : 0, 'TF' : 0, 'HM' : 0, 'NHM' : 0, 'TM' : 0}
TRI_2 = {'HF' : 0, 'NHF' : 0, 'TF' : 0, 'HM' : 0, 'NHM' : 0, 'TM' : 0}
TRV_1 = {'HF' : 0, 'NHF' : 0, 'TF' : 0, 'HM' : 0, 'NHM' : 0, 'TM' : 0}
TRV_2 = {'HF' : 0, 'NHF' : 0, 'TF' : 0, 'HM' : 0, 'NHM' : 0, 'TM' : 0}
TRV_3 = {'HF' : 0, 'NHF' : 0, 'TF' : 0, 'HM' : 0, 'NHM' : 0, 'TM' : 0}
TRV_4 = {'HF' : 0, 'NHF' : 0, 'TF' : 0, 'HM' : 0, 'NHM' : 0, 'TM' : 0}

编辑:我的解决方案。我会记住g.d.d.c.的方法,但我需要为初始的零值设置键,这样我就可以简单地打印TRI_1,看到{'key' : 0}出现。这是Padraic的字典模板和Aleksi的推导结合的结果。谢谢你提供的简单可扩展的解决方案!

TEMP = dict.fromkeys('HF NHF TF HM NHM TM'.split(), 0)
TRI_1, TRI_2, TRV_1, TRV_2, TRV_3, TRV_4 = ([dict(TEMP) for i in range(6)])

3 个回答

0

你可以通过以下方式来复制字典:

new_dict = dict(old_dict)

如果你想把所有的键都初始化为相同的值,你也可以使用:

new_dict = dict.fromkeys(keys, value)

也就是说,在这种情况下:

template_dict = dict.fromkeys('HF NHF TF HM NHM TM'.split(), 0)

不过,如果初始值都是一样的,你也可以使用g.d.d.c的方法,这个方法会自动创建所有内容。这个方法的缺点是,它可能会让你在字典键中打错字时不容易发现,因为它会自动创建新的键,而不是报错。但这显然可能会让事情变得更简单。最终,这完全取决于你的个人喜好。

1

我觉得我会用这个:

from collections import defaultdict
container = defaultdict(lambda: defaultdict(int))

然后你可以这样来统计:

container['TRV_1']['HF'] += 1
1

如果你想要一个字典的模板:

template_dict = {'HF': 0, 'NHF': 0, 'TF': 0, 'HM': 0, 'NHM': 0, 'TM': 0}

TRI_1,TRI_2={},{}
TRI_1.update(template_dict)
TRI_2.update(template_dict)
print TRI_1,TRI_2
{'TF': 0, 'NHF': 0, 'HM': 0, 'NHM': 0, 'HF': 0, 'TM': 0} {'TF': 0, 'NHF': 0, 'HM': 0, 'NHM': 0, 'HF': 0, 'TM': 0}

你可以用这个模板来创建新的字典,并且更新它们,这样每次想要一个新的字典时,就不用手动输入数据了。

或者直接这样做:

TRI_1 = dict(template)

撰写回答