如何使用新密钥将值从一个字典复制到第二个字典?

时间:2016-09-17 21:19:59

标签: 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,  "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])

并且只是用每个新值覆盖字典。我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

你如何让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]

答案 1 :(得分:0)

您可以按类创建包含可用项目的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()