Ausgabe
Ich habe eine JSON-Datei, die so aussieht (gekürzt):
data = {
"station": [
{
"key": "105285",
"name": "Borlänge Sol",
"owner": "SMHI",
"ownerCategory": "CLIMATE",
"measuringStations": "CORE",
"from": 536457600000,
"to": 1664719200000,
"height": 168.0,
"latitude": 60.4878,
"longitude": 15.4297,
"value": [{"date": 1664719200000, "value": "0", "quality": "Y"}],
},
{
"key": "71415",
"name": "Göteborg Sol",
"owner": "SMHI",
"ownerCategory": "CLIMATE",
"measuringStations": "CORE",
"from": 1286409600000,
"to": 1664719200000,
"height": 84.824,
"latitude": 57.6879,
"longitude": 11.9796,
"value": [{"date": 1664719200000, "value": "1429", "quality": "Y"}],
},
{
"key": "68545",
"name": "Hoburg Sol",
"owner": "SMHI",
"ownerCategory": "CLIMATE",
"measuringStations": "CORE",
"from": 1352991600000,
"to": 1664719200000,
"height": 36.0,
"latitude": 56.921,
"longitude": 18.1506,
"value": [{"date": 1664719200000, "value": "0", "quality": "Y"}],
},
{
"key": "65075",
"name": "Karlskrona Sol",
"owner": "SMHI",
"ownerCategory": "CLIMATE",
"measuringStations": "CORE",
"from": 1246406400000,
"to": 1664719200000,
"height": 10.0,
"latitude": 56.1091,
"longitude": 15.587,
"value": [{"date": 1664719200000, "value": "3586", "quality": "Y"}],
},
{
"key": "178985",
"name": "Tarfala Sol",
"owner": "SMHI",
"ownerCategory": "CLIMATE",
"measuringStations": "CORE",
"from": 1167609600000,
"to": 1664719200000,
"height": 1144.0,
"latitude": 67.9123,
"longitude": 18.6101,
"value": None,
},
]
}
Ich möchte eine Liste der Werte erstellen, die darin enthalten sind 'value'
, dh [0, 1429, 0, 3586]
ich habe dies versucht, aber es gibt einen Fehler zurück:
value_dict = [data['station'][i]['value']['value'] for i in range(len(data['station'])) if data['station'][i]['value'][0]['value'] is not None]
Wie kann ich auf diese Werte zugreifen? Ist dies auch der richtige Weg, um NoneType-Werte (wie den letzten) zu ignorieren?
Lösung
Sie können Werte wie folgt erhalten:
In [1]: [item.get('value')[0].get('value') for item in data['station']]
Out[1]: ['0', '1429', '0', '3586']
Mit können Sie die Werte filter
ignorieren .None
list(filter(None, [item.get('value')[0].get('value') for item in data['station']]))
Beantwortet von – Rahul KP
Antwort geprüft von – David Goodson (FixError Volunteer)