将字典复制到另一个字典中

时间:2015-11-11 09:17:02

标签: python python-3.x dictionary

我正在制作游戏,其中一个命令,一个是拾取项目,不能正常工作。代码几乎检查项目是否在房间内,然后是否将其复制到玩家库存,然后从房间中删除该项目。但无论我尝试什么,它都不做任何事情或将密钥复制到字典中。

以下是代码:

def pickup(self, item):
    conf = input('Do you want to pick up the ' + item.lower() + ': ')
    if conf.lower() == 'y' or 'yes':
        try:
            self.inventory.update(room[self.room_number]['items'][item])
            del room[self.room_number]['items'][item]
        except KeyError:
            print('You look everywhere but can\'t find a ' + item.lower())
    else:
        print('You consider it, but decide not to pick up the ' + item.lower())

当我打印库存字典时,我得到了这个

player.inventory
    {
     'type': 'weapon',
     'equippable': True, 
     'value': 0, 
     'desc': 'a wooden stick, could be useful', 
     'name': 'Wooden Stick', 
     'perks': {
         'defense': 0, 
         'health': 0, 
         'damage': 6, 
         'magic_damage': 0
     }
}

{}

我想要的是:

player.inventory
    {
    'wooden stick':{
        'type': 'weapon', 
        'equippable': True, 
        'value': 0, 
        'desc': 'a wooden stick, could be useful', 
        'name': 'Wooden Stick', 
        'perks': {
            'defense': 0, 
            'health': 0, 
            'damage': 6, 
            'magic_damage': 0
            }
        }

有谁知道我怎么能得到这个结果。我尝试的任何东西似乎都没有用,我已经检查过是否有人已经回答了这个但却无法找到任何内容。

谢谢:)

2 个答案:

答案 0 :(得分:2)

你使用了错误的功能。在这一行:

self.inventory.update(room[self.room_number]['items'][item])

update实际上会将room[self.room_number]['items'][item]中的所有键和值添加到self.inventory

相反,您希望将项目字典指定为库存字典中的值,并使用该项目的键。

所以你应该这样做:

self.inventory[item] = room[self.room_number]['items'][item]

或者更好的是,正如@MKesper指出的那样,你应该pop密钥,以便在你把它放入清单时从房间的项目字典中删除它:

self.inventory[item] = room[self.room_number]['items'].pop(item, None)

这将尝试从字典中获取item,如果未找到,则会返回None。如果您删除None,那么您将拥有KeyError,并且根据item作为有效密钥的信心,KeyError可能会更好地抓住sql.DB出现错误键名时的异常情况。

Docs on dict.pop

答案 1 :(得分:0)

您可以使用更新方法:

dict1.update(dict2)