Python Словарь - итерация для извлечения значений из точных ключей из ответа JSON в наборы - PullRequest
1 голос
/ 18 июня 2020

Я хотел бы попытаться исправить мой скрипт, чтобы привести вывод в порядок и читабельность. У меня есть ответ JSON со значениями, которые мне нужно собрать в отдельный список (называемый ниже new_report). Список JSON со словарями выглядит так:

json_op = [{'Group': '1', 'hostname': 'host2', 'sw_version': '2.08', 'bios': '1.214'},
 {'Group': '2', 'hostname': 'host45', 'sw_version': '2.15', 'bios': '1.224'}, 
 {'Group': '3', 'hostname': 'host23', 'sw_version': '2.10', 'bios': '1.254'}, 
 {'Group': '4', 'hostname': 'host100', 'sw_version': '2.20', 'bios': '1.234'}]

Я написал следующее, чтобы перебирать его и извлекать значения для 'hostname' и 'sw_version' в новый словарь:

new_report = []
for item in json_op:
    keys = ['hostname', 'sw_version']
    hostname_report = {item[x] for x in keys if x in item}
    new_report.append(hostname_report)

print(new_report)

Текущий вывод - это список наборов:

[{'2.08', 'host2'}, {'host45', '2.15'}, {'2.10', 'host23'}, {'2.20', 'host100'}]

Я бы очень хотел этого добиться (последовательность не имеет значения, пока сохраняется имя хоста, формат sw_version):

 [{'host2', '2.08'}, {'host45', '2.15'}, {'host23', '2.10'}, {'host100', '2.20'}]

Кто-нибудь знает, где я ошибаюсь с пониманием списка в моем коде?

Спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете поместить его в список списков, таким образом, вы будете поддерживать порядок, чтобы вы могли составить понимание вложенного списка.

json_op = [{'Group': '1', 'hostname': 'host2', 'sw_version': '2.08', 'bios': '1.214'},
 {'Group': '2', 'hostname': 'host45', 'sw_version': '2.15', 'bios': '1.224'}, 
 {'Group': '3', 'hostname': 'host23', 'sw_version': '2.10', 'bios': '1.254'}, 
 {'Group': '4', 'hostname': 'host100', 'sw_version': '2.20', 'bios': '1.234'}]
keys = ['hostname', 'sw_version']
new_report = [[i[x] for x in keys if x in i] for i in json_op]
print(new_report)

Ouput

[['host2', '2.08'], ['host45', '2.15'], ['host23', '2.10'], ['host100', '2.20']]
1 голос
/ 18 июня 2020

in Python, set s не поддерживают порядок.

Вместо этого вы можете просто использовать кортежи:

замените {item[x] for x in keys if x in item} на tuple(item[x] for x in keys if x in item)

...