не могу манипулировать значениям вложенного словаря потому-что разные ключи
list_b = {'26002622': [{'counters': {'engine_hours': 17090610, 'mileage': 49272782, 'bytes': 56226445}}, {'lls': {'3': {'value': 195.942028986, 'filled': 0, 'timeDiff': 1671861696, 'latDiff': 0, 'lonDiff': 0}}}], '22904647': [{'counters': {'engine_hours': 51313246, 'mileage': 108255924, 'bytes': 173823294}}, {'lls': {'5': {'value': 297.583892616, 'filled': 0, 'timeDiff': 1671841582, 'latDiff': 0, 'lonDiff': 0}}}]
for i in list_b:
print(list_b[i][1]['lls'])
результат кода:
{'3': {'value': 195.942028986, 'filled': 0, 'timeDiff': 1671861696, 'latDiff': 0, 'lonDiff': 0}},
{'5': {'value': 297.583892616, 'filled': 0, 'timeDiff': 1671841582, 'latDiff': 0, 'lonDiff': 0}}
Мне нужно чтоб вывел код значение вложенного словаря , то есть 'value'. Пытался через .items() и .values() но дальнейшая манипуляция с данными не возможна
Ответы (3 шт):
Автор решения: Dmitry
→ Ссылка
Поскольку у вас там словарь, то используйте метод values() к словарю.
for i in list_b:
for value in list_b[i][1]['lls'].values():
print(value["value"])
вывод
195.942028986
297.583892616
Автор решения: CrazyElf
→ Ссылка
Ну дальше же у вас просто словари, от которых нужно вам взять значения с помощью .values() (ключи нас не интересуют, я так понял), и это будут тоже словари, а в этих словарях уже взять данные по ключу value:
list_b = \
{'22904647': [{'counters': {'bytes': 173823294,
'engine_hours': 51313246,
'mileage': 108255924}},
{'lls': {'5': {'filled': 0,
'latDiff': 0,
'lonDiff': 0,
'timeDiff': 1671841582,
'value': 297.583892616}}}],
'26002622': [{'counters': {'bytes': 56226445,
'engine_hours': 17090610,
'mileage': 49272782}},
{'lls': {'3': {'filled': 0,
'latDiff': 0,
'lonDiff': 0,
'timeDiff': 1671861696,
'value': 195.942028986}}}]}
for i in list_b:
for val in list_b[i][1]['lls'].values():
print(val['value'])
Вывод:
297.583892616
195.942028986
Можно и ещё немного код сократить, потому что и от словаря верхнего уровня вам ключи не нужны, а только значения:
for i in list_b.values():
for val in i[1]['lls'].values():
print(val['value'])
Автор решения: Алексей Р
→ Ссылка
Универсальный способ - обойти всю структуру рекурсивно:
def extract_value(x, lst=None):
if lst is None:
lst = []
if isinstance(x, list):
for el in x:
extract_value(el, lst)
if isinstance(x, dict):
for k, v in x.items():
if k == 'value':
lst.append(x['value'])
else:
extract_value(v, lst)
return lst
list_b = {'26002622': [{'counters': {'engine_hours': 17090610, 'mileage': 49272782, 'bytes': 56226445}}, {
'lls': {'3': {'value': 195.942028986, 'filled': 0, 'timeDiff': 1671861696, 'latDiff': 0, 'lonDiff': 0}}}],
'22904647': [{'counters': {'engine_hours': 51313246, 'mileage': 108255924, 'bytes': 173823294}}, {
'lls': {'5': {'value': 297.583892616, 'filled': 0, 'timeDiff': 1671841582, 'latDiff': 0, 'lonDiff': 0}}}]}
print(extract_value(list_b))
[195.942028986, 297.583892616]