python - 如何遍历嵌套字典(在嵌套列表中)并将值复制到新列表中
问题描述
我正在尝试对一组电子竞技游戏数据进行一些数据分析。数据格式如下(从json转换而来):
game_data = [{"match_id":1, "players":[{"player_name":"Tom", "won":True},
{"player_name":"Anna", "won":False}]},
{"match_id":2, "players":[{"player_name":"Tom", "won":False},
{"player_name":"Fred", "won":True}]}]
我想得到一个包含他的赢和输的球员“汤姆”的名单。像这样:
tom_won = [True, False]
到目前为止我所尝试的(见下文)都不起作用,所以我希望你们中的一个人能够向我展示一种更好的方法。
index = 0
tom_won = []
while index < len(game_data)
for game_data[index]["players"][0]["won"] in data[index]:
if game_data[index]["players"][0]["player_name"] == "Tom":
tom_won.append(game_data[index]["players"][0]["won"])
for game_data[index]["players"][1]["won"] in data[index]:
if game_data[index]["players"][1]["player_name"] == "Tom":
tom_won.append(game_data[index]["players"][1]["won"])
index += 1
解决方案
您需要遵循您拥有的结构:
- 迭代外部数组中的匹配元素
- 对于每个数组,从 key 给定的数组中迭代玩家
'players'
- 为每个玩家检查名称,并检索
name
它是否是您正在寻找的玩家。
def get_won(data, name):
result = []
for match in data:
for player in match['players']:
if player['player_name'] == name:
result.append(player['won'])
return result
print(get_won(game_data, 'Tom')) # [True, False]
print(get_won(game_data, 'Fred')) # [True]
print(get_won(game_data, 'Anna')) # [False]
List-comprehension
版本
def get_won(data, name):
return [player['won'] for match in data for player in match['players']
if player['player_name'] == name]
推荐阅读
- tensorflow - 来自 google ml 引擎的 JSON 无效
- jquery - 带有ajax的django:函数未从源文件加载
- amazon-web-services - 为 AWS 中的负载均衡器指定运行状况检查
- java - 在 XMLInputFactory 中禁用功能安全处理
- c# - 忽略从以 XML 格式输出的 CSV 文件中读取的数组的标题行
- image - 如何从 Active Directory 中检索图像?
- json - 每次我从电话簿中删除人时都会出错 - React JS + Axios
- flutter - 单身人士被处置
- c - 十六进制除以 10
- ios - TVOS UITableViewCell _UIFloatingContentView 它是什么以及为什么?