首页 > 解决方案 > Python Dictionary - 迭代以从 JSON 响应中的确切键中检索值到集合中

问题描述

我想尝试修复我的脚本以将输出整理为有序且可读的内容。我有一个 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'}]

我编写了以下代码来遍历它并将“主机名”和“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'}]

有谁知道我的代码中的列表理解哪里出了问题?

谢谢

标签: pythonpython-3.xsetlist-comprehension

解决方案


在 Python 中,sets 不维护顺序。

您可以简单地使用元组:

替换{item[x] for x in keys if x in item}tuple(item[x] for x in keys if x in item)


推荐阅读