Python 如何使用新键将值从一个字典复制到另一个字典?

Python 如何使用新键将值从一个字典复制到另一个字典?,python,dictionary,key,Python,Dictionary,Key,我试图在我的游戏中为某些职业制造专属武器。我有一个项目数据库,格式为: itemsList = { 1: {"name": "Padded Armor", "armor": 1, "value": 5, "class": "light"}, 2: {"name": "Leather Armor", "armor": 2, "value": 10, "class": "light"}, 3: {"name": "Studded Leather Armor", "armor": 3, "

我试图在我的游戏中为某些职业制造专属武器。我有一个项目数据库,格式为:

itemsList = {
1: {"name": "Padded Armor",  "armor": 1,  "value": 5, "class": "light"},
2: {"name": "Leather Armor",  "armor": 2,  "value": 10, "class": "light"},
3: {"name": "Studded Leather Armor",  "armor": 3,  "value": 25, "class": "light"},
...
19: {"name": "Dagger", "damage" : int(random.randrange(1, 4)), "value": 2, "Type": "Dagger"},
20: {"name": "Dagger + 1", "damage" : int(random.randrange(1, 4) + 1), "value": 200, "Type": "Dagger"},
21: {"name": "Dagger + 2", "damage" : int(random.randrange(1, 4) + 2), "value": 750, "Type": "Dagger"},
22: {"name": "Dagger + 3", "damage" : int(random.randrange(1, 4) + 3), "value": 2000, "Type": "Dagger"}
}
如果一个职业能够装备某种武器,我将把它导入一本新字典

character.canEquipWeapon = {}
我想为字典中的一组新键分配名称、伤害、值和类型,只是,我只想为某些类添加某些子集(匕首、狼牙棒、剑)

我试过了

character.canEquipWeapon.update(itemsList[5])

这只会用每个新值覆盖字典。我该怎么做呢?

itemsList
成为一个数组而不是dict,你觉得怎么样?看起来你无论如何都在用它作为数组。那样的话,你就可以做

itemsList2 = [weapon for weapon in itemsList if weapon.type == "dagger"]
或者如果武器类型存储在,比如,
character.weaponTypes

itemsList2 = [weapon for weapon in itemsList if weapon.type in character.weaponTypes]

itemsList
成为一个数组而不是dict,您感觉如何?看起来你无论如何都在用它作为数组。那样的话,你就可以做

itemsList2 = [weapon for weapon in itemsList if weapon.type == "dagger"]
或者如果武器类型存储在,比如,
character.weaponTypes

itemsList2 = [weapon for weapon in itemsList if weapon.type in character.weaponTypes]

您可以按类创建包含可用项的dict,以便对于给定的类,您拥有它可以装备的ID列表,例如:

classItem = {
          'rogue'   : [1,2,3,12,13,14,15], 
          'mage'    : [13,15,16,18], 
          'soldier' : [1,2,3,4,5,6,7],
         }
然后获取流氓可用的物品列表,例如:

rogueItems = [v for k,v in itemsList.items() if k in classItem['rogue']]

请注意,使用python2时,您必须使用
itemsList.iteritems()
而不是
itemsList.items()

,您可以按类创建包含可用项的dict,以便对于给定类,您拥有它可以配置的ID列表:

classItem = {
          'rogue'   : [1,2,3,12,13,14,15], 
          'mage'    : [13,15,16,18], 
          'soldier' : [1,2,3,4,5,6,7],
         }
然后获取流氓可用的物品列表,例如:

rogueItems = [v for k,v in itemsList.items() if k in classItem['rogue']]


请注意,使用python2时,您必须使用
itemsList.iteritems()
而不是
itemsList.items()

您实际上没有提供“新键”-请尝试
character.canEquipWeapon.update({'whatever]:itemsList[5]})
您实际上没有提供“新键”-请尝试
character.canEquipWeapon.update({'whatever':itemsList[5]}
它的一行作为数组会是什么样子?
itemsList=[{“name”:“dagger”,…,“class”:“light”},{“name”:“dagger+1”…},…]
这种样式唯一的问题是物品没有相关的ID号。@Dragoonknight那么我的答案对你来说可能更好,因为它保留了ID。作为数组的一行应该是什么样子?
itemsList=[{“name”:“dagger”,…,“class”:“light”},{“name”:“dagger+1”…},]
这种样式唯一的问题是项目没有相关的ID号。@Dragoonknight那么也许我的答案对你更合适,因为它保留了ID。我喜欢这个答案,但我测试了rogueItems,它给了我一个无效的语法错误。我甚至导入了IteItems。有没有办法调用rogueItems中的特定项目还有?你的python版本是什么?我使用的是2.7.6版本,Cloud9 ide。完整的错误消息是回溯(最近一次调用):文件“/home/ubuntu/workspace/main.py”,第1行,在from playerfo import*文件“/home/ubuntu/workspace/playerfo.py”,第442行roguewapons=[v if k in classItem['rogue']对于itemsList.iteritems()]中的k,v,好主意!我本来要走最终幻想路线,但也许我会使用“rogueItems”将列表作为熟练度记录,然后如果熟练,将+1添加到攻击掷骰中,将+2添加到伤害中!我喜欢这个答案,但我测试了rogueItems,它给了我一个无效的语法错误。我甚至导入了iteritems。有没有办法也调用rogueItems中的特定项?你的python版本是什么?我使用的是2.7.6版,Cloud9l错误消息是回溯(最后一次调用):文件“/home/ubuntu/workspace/main.py”,第1行,从playerInfo导入*文件“/home/ubuntu/workspace/playerInfo.py”,第442行rogueWapons=[v if k in classItem['rogue']表示k,v in itemsList.iteritems()]好主意!我是在走最终幻想路线,但也许我会使用“盗贼”列表作为熟练程度的记录,然后如果熟练的话,增加+1攻击骰和+2伤害!