【问题标题】:How to filter and read values and keys out of a nested dictionary?如何从嵌套字典中过滤和读取值和键?
【发布时间】:2021-10-10 05:55:00
【问题描述】:

我目前正在编写一个 python 脚本,理论上它应该读取我一个 YAML 文件 (hostname_list) 并将内容保存为嵌套字​​典(称为相同的字典)。在下一步中,它应该遍历第二个字典的所有键(参见下面的示例)并在第三个字典中检查键“严重性”以及该键是否具有在开头的参数中给出的某个值。如果该参数与某个字典中的值相同,则它应该将第二个字典的键以及第三个字典的所有键和值以 json 格式打印到控制台中。

我的字典:

{"sap_landscape":  #dict1
                 {"dctr1440":  #dict2
                            {"hostname": "dctr1440", "SID": "TT", "Type": "Spo",  #dict3
                            "Landscape": "RFK", "Severity": "SX", "Username": "adm", 
                            "UserID": 93, "Global": null, "Cycle": 1}, 
                 "dctr1091": {"hostname": "dctr1091", "SID": "TT", "Type": "Spo", "Landscape": 
                             "RFK", "Severity": "SX", "Username": null, "UserID": null, 
                             "Global": null, "Cycle": 2}, 
                 "dctr1512": {"hostname": "dctr1512", "SID": "TT", "Type": "C", 
                              "Landscape": "RFK", "Severity": "SBX", "Username": null, 
                              "UserID": null, "Global": null, "Cycle": 1}, 
                 "dctr193": {"hostname": "dctr193", "SID": "TT", "Type": "I", "Landscape": 
                              "RFK", "Severity": "SX", "Username": null, "UserID": null, 
                              "Global": null, "Cycle": 2}

到目前为止我写的代码:

def main(severity):
with open(filename) as infile:
    hostname_list = yaml.safe_load(infile)

for k in hostname_list['sap_landscape'].keys():           # i don't know if that is correct 
    for s in hostname_list['sap_landscape'][k].items():     since i am clueless what to do 
                                                            after i read the file and saved it 
                                                            as a dict
        

很抱歉,如果这不是很多工作,但我对 python 非常陌生,并且在字典方面非常挣扎。如果你有一个解决方案并且有一点时间,如果你能写一个简短的描述你是如何/为什么按照你的方式做这件事会很好,因为我想从我的错误中吸取教训。

提前感谢 :)

【问题讨论】:

  • 请分享您想要的确切结果。

标签: python json dictionary filter


【解决方案1】:

这是如何做到的:

for k1, v1 in hostname_list['sap_landscape'].items():
    for k2, v2 in v1.items():
        if k2 == "Severity" and v2 == "The value that you want":
            print(k1) # to print key name of second dict
            print(v1) # to print contents of that dict

在此解决方案中,k1 将是原始字典的每个键,而 v1 将是相应的值(即字典本身)。然后遍历v1 的项目将为您提供内部字典的每个键和值。现在您可以检查某个键是否具有某个值并执行您想要的操作。

【讨论】:

  • @OlvinR​​oght "Severity" 不是原始字典的键,所以它会给出None。但是您可以使用 .get() 和内部 v1 字典来获得结果。
  • @rustom garayev 非常感谢您的帮助。有一个伟大的一周。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多