Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一本词典复制到另一本词典中_Python_Python 3.x_Dictionary - Fatal编程技术网

Python 将一本词典复制到另一本词典中

Python 将一本词典复制到另一本词典中,python,python-3.x,dictionary,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': tr

我正在做一个游戏,其中一个命令,一个拾取物品的命令,不起作用。代码主要检查物品是否在房间内,然后将其复制到玩家库存,然后从房间中删除物品。然而,无论我尝试什么,它要么什么也不做,要么把里面的键复制到字典里

代码如下:

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
            }
        }
有人知道我怎样才能得到这个结果吗。我所尝试的一切似乎都不起作用,我已经检查过是否有人回答了这个问题,但找不到任何答案


谢谢:)

您使用了错误的功能。在这方面:

self.inventory.update(room[self.room_number]['items'][item])
update
基本上将
room[self.room\u 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)
这将尝试从字典中获取
,如果未找到该项,则将返回
。如果删除
None
,则会出现
KeyError
,并且取决于您对
是否为有效密钥的信心,当出现错误的键名时,
KeyError
可能更好地捕捉异常情况


您可以使用更新方法:


dict1.update(dict2)

如果conf.lower()?提示:
bool(str)
True
。这样,如果用户输入YES或YES,我就不需要所有不同的输入方式。更多的是为了用户友好,这是必要的。这不是做你认为它做的。上述条件将始终评估为
。如果conf.lower()。。或者在
中使用
。如果想要
如果conf.lower()在('y'或'yes')
中,您当前拥有的将在
conf.lower()='y'
'yes'
真的情况下进行计算,但是
'yes'
将始终计算为
真的
。好的,谢谢,我没有注意到。这似乎有效。我想我已经试过了,但是已经写了self.inventory=room[self.room_number]['items'][item]。我应该解决这个问题的。谢谢你的帮助。另外,从字典中“弹出”键可能更好:我的字典。正如在“谢谢”中写的,我的字典已经读过了,但不确定它做了什么。重读一遍,现在就更有意义了。:)什么也看不见。可能链接已断开?请参阅第二个链接,然后单击“运行”
self.inventory[item] = room[self.room_number]['items'].pop(item, None)