如何在Python的多个字典的字典中添加相同的“项”?

2024-05-16 22:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎么能把这些角色的速度加起来,即使他们不都有属性速度?这是一个例子,还有许多其他属性。字符随机选取并分组在一起:

character_1 = {'Money': .3, 'Strength': .25, 'Speed': .05}
character_2 = {'Money': .3, 'Age': 25, 'Speed': .7}
character_3 = {'Money': .3, 'Strength': .25, 'Power': 5}

我怎样才能知道所有这些人物的综合速度、金钱、年龄等呢?(如果没有为其他人定义年龄,正确答案应该是总共25岁) 谢谢您!!你知道吗


Tags: 角色age属性定义字符金钱速度strength
2条回答

看看defaultdict 。您可以将您的字符实现为float defaultdict,这将为尚未设置的任何项提供0.0

from collections import defaultdict

character = defaultdict(float)

因此,如果以前没有写入过值,那么现在任何第一个项检索都将用零初始化该值:

In [7]: character["Money"]
Out[7]: 0.0

In [8]: character["Speed"]
Out[8]: 0.0

不过,这种方法在某些应用中也有其缺点。例如,dict中并非所有值都是数字类型,或具有不同的初始值。在这种情况下,class可能是您唯一的选择,正如@Anton vBR所指出的。你知道吗

您可以通过dictslist循环,并将它们的values组合成这样的结果dict

character_1 = {'Money': .3, 'Strength': .25, 'Speed': .05}
character_2 = {'Money': .3, 'Age': 25, 'Speed': .7}
character_3 = {'Money': .3, 'Strength': .25, 'Power': 5}

dict_list = [character_1, character_2, character_3]

result = dict()

for d in dict_list:
    for k, v in d.items():
        if k in result:
            result[k] += v
        else:
            result[k] = v

print(result)

{'Money': 0.8999999999999999, 'Strength': 0.5, 'Speed': 0.75, 'Age': 25, 'Power': 5}
>>> 

相关问题 更多 >