【问题标题】:Is this Dictionary comprehension possible?这个字典理解可能吗?
【发布时间】:2017-09-01 20:02:56
【问题描述】:

我正在尝试创建具有字典理解的字典。 字典应该是这样的:

到目前为止我尝试过:

player_objects = ['list', 'of', 'player_objects']
extended_data = {player_name:{'Money':100, 'Items'=['Item1', 'Item2']}}
data = {player_object:extended_data.get(player).get('Items') for player in extended_data for player_object in player_objects}
#expected output:
data = {player_object:['list', 'of', 'items']}

但这会返回一个字典,其中所有玩家都有最后一个玩家的Items,我还发现这来自for player_object in player_objects。 我可以通过字典理解得到我想要的字典吗?

【问题讨论】:

  • 请尝试重写你的代码片段,这样整个事情就是minimal, verifiable and complete。也许将“玩家”替换为他们的名字字符串,显示输入和期望的输出
  • 只是一种预感,但我觉得使用 Player 类可以使这段代码变得更简单......
  • 是否有任何属性将player_object 映射到玩家姓名?
  • @bphi player_object 实际上是一个类thisthis Bretty Beatty 我想如果我理解你的话,这也涵盖了你的问题?
  • 为什么不赚玩家类的金钱和物品属性呢?这样你就可以使用类方法来操作这些东西......

标签: python dictionary dictionary-comprehension


【解决方案1】:

虽然可能有更 Pythonic 的解决方案,但我确实对您的原始代码进行了修复。问题是您的dict 理解中的双重for。当你这样做时,你会独立地迭代 player_objectsextended_data。相反,遍历其中一个并使用这些名称访问另一个 dict。您也不能在该理解中使用 self - 它不引用任何内容,除非您的代码恰好存在于类方法中。

这是一个模型:

player_objects = ['player_a', 'player_b', 'player_c']
extended_data = {
    'player_a': {'Money': 100, 'Items': ['dagger', 'armor']},
    'player_b': {'Money': 50, 'Items': ['sword', 'shield']},
    'player_c': {'Money': 20, 'Items': ['boots', 'staff']},
}

items_by_player = {player: extended_data[player].get('Items') for player in player_objects}

print(items_by_player)
# {'player_a': ['dagger', 'armor'], 'player_b': ['sword', 'shield'], 'player_c': ['boots', 'staff']}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2013-11-30
    • 1970-01-01
    • 2019-10-05
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多