识别一个字典中的密钥,并使用它来修改另一个字典的值

时间:2016-07-29 21:58:40

标签: python dictionary

对于我正在制作的基于文本的角色扮演游戏,我有字典概述各种游戏中的宗教,种族等等。这些宗教的一些价值观包括玩家统计数据的增益,例如:

religion_Dict = {'Way of the White': {'buffs': {'intelligence': 5, 'defense': 3},
                                     'abilities': [...],
                                     'description': '...'}}

当我尝试将宗教的stat buff应用于玩家的统计数据时,我的问题就出现了。如果我有一个看起来像这样的玩家类:

class Player(object)    
    def __init__(self):
        ...
        self.religion = None
        self.stats = {'intelligence': 10, 'defense': 8}

现在,让我们说玩家加入宗教Way of the White,如何识别密钥intelligencedefense及其各自的值 - 在字典{{1}内 - 并将它们应用到播放器的religion_dict字典的值上?

我知道我可以使用stats或基本for循环来提取键名,但是如何使用它来正确修改相应的玩家统计值?

我确信我只是错过了一个基本概念。无论如何,感谢愿意帮助回答这个简单问题的人!我很感激!

3 个答案:

答案 0 :(得分:2)

以下是您将如何解决这个问题的草图:

religion_Dict = {'Way of the White': {'buffs': {'intelligence': 5, 'defense': 3},
                                     'abilities': [...],
                                     'description': '...'}}
buffs = religion_Dict['Way of the White']['buffs']

for key in buffs:
    player.stats[key] = player.stats.get(key,0) + buffs[key]

当然,您应该将此逻辑包装在Player类的方法中,但上面的逻辑就是您要寻找的。请注意.get方法接受第二个参数,如果没有键值,它将返回默认值。因此,此行将为任何统计数据添加1,如果它不存在,则将1加到0。

答案 1 :(得分:1)

这为Player添加了一种方法,可以将字典中的值分配给玩家统计信息。它使用get来确保值在字典中,并且包含字段buffs。如果是,则获取intelligencedefense的值,并将其添加到播放器的统计信息中。

class Player(object)    
    def __init__(self):
        ...
        self.religion = None
        self.stats = {'intelligence': 10, 'defense': 8}

    def join_religion(religion):
        stats = religion_dict.get(religion)
        if stats and 'buffs' in stats:
            self.intelligence += stats['buffs'].get('intelligence', 0)
            self.defense += stats['buffs'].get('defense', 0)

p = Player()
p.join_religion('Way of the White')

答案 2 :(得分:0)

self.stats = religion_Dict['Way of the White']['buffs']