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)