【发布时间】:2017-01-26 01:27:00
【问题描述】:
我有以下.json 文件,其中有一些列表,例如某些元素中的值:
{
"paciente": [
{
"id": 1234,
"nombre": "Pablo",
"sesion": [
{
"id": 12345,
"juego": [
{
"nombre": "bonzo",
"nivel": [
{
"id": 1234,
"nombre": "caida libre"
}
],
"___léeme___": "El array 'iteraciones' contiene las vitorias o derrotas con el tiempo en segundos de cada iteración",
"iteraciones": [
{
"victoria": true,
"tiempo": 120
},
{
"victoria": false,
"tiempo": 232
}
]
}
],
"segmento": [
{
"id": 12345,
"nombre": "Hombro",
"movimiento": [
{
"id": 12,
"nombre": "flexion",
"metricas": [
{
"min": 12,
"max": 34,
"media": 23,
"moda": 20
}
]
}
]
}
]
}
]
},
{
"id": 156,
"nombre": "Bernardo",
"sesion": [
{
"id": 456,
"juego": [
{
"nombre": "Rita",
"nivel": [
{
"id": 1,
"nombre": "NAVEGANDO"
}
],
"___léeme___": "El array 'iteraciones' contiene las vitorias o derrotas con el tiempo en segundos de cada iteración",
"iteraciones": [
{
"victoria": true,
"tiempo": 120
},
{
"victoria": false,
"tiempo": 232
}
]
}
],
"segmento": [
{
"id": 12345,
"nombre": "Escapula",
"movimiento": [
{
"id": 12,
"nombre": "Protracción",
"metricas": [
{
"min": 12,
"max": 34,
"media": 23,
"moda": 20
}
]
}
]
}
]
}
]
}
]
}
从我的脚本中,我想通过它的不同嵌套元素来获取特定信息
import json
with open('myfile.json') as data_file:
data = json.loads(data_file.read())
patient_id = data["paciente"][0]["id"]
patient_name = data["paciente"][0]["nombre"]
id_session = data["paciente"][0]["sesion"][0]["id"]
game_session = data["paciente"][0]["sesion"][0]["juego"][0]["nombre"]
level_game = data["paciente"][0]["sesion"][0]["juego"][0]["nivel"][0]["nombre"]
iterations = data["paciente"][0]["sesion"][0]["juego"][0]["iteraciones"]
iterations_victory = data["paciente"][0]["sesion"][0]["juego"][0]["iteraciones"][0]["victoria"]
iterations_time = data["paciente"][0]["sesion"][0]["juego"][0]["iteraciones"][0]["tiempo"]
iterations_victory1 = data["paciente"][0]["sesion"][0]["juego"][0]["iteraciones"][1]["victoria"]
iterations_time1 = data["paciente"][0]["sesion"][0]["juego"][0]["iteraciones"][1]["tiempo"]
segment = data["paciente"][0]["sesion"][0]["segmento"][0]["nombre"]
movement = data["paciente"][0]["sesion"][0]["segmento"][0]["movimiento"][0]["nombre"]
#metrics = data["paciente"][0]["sesion"][0]["segmento"][0]["movimiento"][0]["metricas"]
metric_min = data["paciente"][0]["sesion"][0]["segmento"][0]["movimiento"][0]["metricas"][0]["min"]
metric_max = data["paciente"][0]["sesion"][0]["segmento"][0]["movimiento"][0]["metricas"][0]["max"]
metric_average = data["paciente"][0]["sesion"][0]["segmento"][0]["movimiento"][0]["metricas"][0]["media"]
metric_moda = data["paciente"][0]["sesion"][0]["segmento"][0]["movimiento"][0]["metricas"][0]["moda"]
print(
'Patient ID:', patient_id,'\n',
'Patient Name:', patient_name, '\n',
'Session:','\n',
' Id Session:',id_session,'\n',
' Game:', game_session, '\n',
' Level:', level_game, '\n',
' Iterations:', len(iterations),'\n',
' Victory:', iterations_victory, '\n',
' Time:', iterations_time, '\n',
' Victory:', iterations_victory1, '\n',
' Time:', iterations_time1, '\n',
' Affected Segment:', segment, '\n',
' Movement:', movement, '\n',
' Metrics:','\n',
' Minimum:', metric_min, '\n'
' Maximum:', metric_max, '\n'
' Average:', metric_average, '\n'
' Moda/Trend:', metric_moda, '\n'
)
这是我的输出:
Patient ID: 1234
Patient Name: Pablo
Session:
Id Session: 12345
Game: bonzo
Level: caida libre
Iterations: 2
Victory: True
Time: 120
Victory: False
Time: 232
Affected Segment: Hombro
Movement: flexion
Metrics:
Minimum: 12
Maximum: 34
Average: 23
Moda/Trend: 20
[Finished in 0.0s]
是否可以优化此代码? 如何使这段代码更具可读性或更短?
我特别想查询列表/数组中的多个元素(以防万一存在),例如段、移动、迭代、游戏等
欢迎任何方向。
【问题讨论】:
-
优化?真的没必要,如果您将
data["paciente"][0]["sesion"][0]["segmento"][0]分配给一个变量并从那里访问后续内容,您可以缩减您的代码。此外,这将加快速度一点,因为您减少了访问字典的次数(这是快速的,所以它是一个小的加速) -
这对于 Code Review StackExchange 站点来说可能是一个更好的问题。
-
您的代码的用途尚不清楚。它将整个内容分配给一堆未连接的变量,形成一个很好的嵌套数据结构。这对你没有任何好处。你应该改变你的方法,而不是试图“优化”这个注定失败的代码。
-
@Tomalak 确实我得到了
json文档的全部内容,并且可能我没有明确表达我的目标。我想访问我的变量中指定的每个键的每个值以操纵它们并将它们放在任何地方,但是当我浏览一些列表元素时我的疑虑出现了...... -
好吧,您可能不只是想打印它们。通常,如果您描述最终目标是什么,会更容易。优雅的代码取决于您打算做什么。