2016-09-17 74 views
1

我试图让我的游戏中的武器专属于某些类。我在表格中的项目数据库:如何使用新密钥将一个字典中的值复制到另一个字典中?

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]) 

而且只是覆盖每一个新值字典。我如何去做这件事?

+0

你不是实际提供*“新钥匙” * - 试'character.canEquipWeapon.update({“什么”: itemsList [5]})' – jonrsharpe

回答

0

您可以创建与类可用物品的字典,因此,对于给定类,你有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()

+1

我喜欢这个答案,但我测试了rogueItems,它给了我一个无效的语法错误。我甚至导入iteritems。有没有办法在rogueItems中调用特定的项目? – Dragoonknight

+0

你的python版本是什么? –

+1

我使用的版本是2.7.6,Cloud9 IDE – Dragoonknight

0

你觉得itemsList是一个数组而不是字典?好像你无论如何都是以数组的形式使用它。这样一来,你可以不喜欢

itemsList2 = [weapon for weapon in itemsList if weapon.type == "dagger"] 

,或者武器类型存储在,比方说,character.weaponTypes

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

它作为一个数组的样子是什么样的? – Dragoonknight

+0

'itemsList = [{“name”:“dagger”,....,“class”:“light”},{“name”:“dagger +1”...},...]' –

+0

只有问题,我与这种风格是该项目没有关联的ID号码。 – Dragoonknight

相关问题