这个字典理解可能吗?
Is this Dictionary comprehension possible?
我正在尝试创建一本具有字典理解力的字典。
该字典应如下所示:
到目前为止我试过:
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']}
但是这个returns一个所有玩家都有最后一个玩家的Items
的字典,我也想出这个来自for player_object in player_objects
。
我可以只通过字典理解得到我想要的字典吗?
虽然可能有更 Pythonic 的解决方案,但我确实有一个针对您的原始代码的修复程序。问题是您 dict
理解中的双重 for
。当你这样做时,你会独立地迭代 player_objects
和 extended_data
。相反,迭代其中一个并使用这些名称访问另一个 dict
。您也不能在该理解中使用 self
- 它不引用任何内容,除非您的代码恰好位于 class 方法中。
这是一个模型:
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']}
我正在尝试创建一本具有字典理解力的字典。 该字典应如下所示:
到目前为止我试过:
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']}
但是这个returns一个所有玩家都有最后一个玩家的Items
的字典,我也想出这个来自for player_object in player_objects
。
我可以只通过字典理解得到我想要的字典吗?
虽然可能有更 Pythonic 的解决方案,但我确实有一个针对您的原始代码的修复程序。问题是您 dict
理解中的双重 for
。当你这样做时,你会独立地迭代 player_objects
和 extended_data
。相反,迭代其中一个并使用这些名称访问另一个 dict
。您也不能在该理解中使用 self
- 它不引用任何内容,除非您的代码恰好位于 class 方法中。
这是一个模型:
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']}