我有下面嵌套的字典:
facter_networking: {"domain": "mylab.com", "fqdn": "mylab.com", "hostname": "mylab", "interfaces": {"ens192": {"bindings": [{"address": "20.9.8.1", "netmask": "255.255.255.221", "network": "20.33.50.62"}], "ip": "20.67.83.48", "mac": "00:00:06:0:e0:d6", "mtu": 1500, "netmask": "255.255.255.224", "network": "20.67.83.48"}, "ens224": {"bindings": [{"address": "20.67.83.48", "netmask": "20.67.83.48", "network": "20.67.83.48"}], "ip": "20.67.83.48", "mac": "20.67.83.48", "mtu": 1500, "netmask": "255.255.255.224", "network": "20.67.83.48"}, "lo": {"bindings": [{"address": "127.0.0.1", "netmask": "255.0.0.0", "network": "127.0.0.0"}], "ip": "127.0.0.1", "mtu": 65536, "netmask": "255.0.0.0", "network": "127.0.0.0"}}, "ip": "20.67.83.48", "mac": "00:00:00:9d:8f:d7", "mtu": 1500, "netmask": "255.255.255.224", "network": "20.67.83.48", "primary": "ens224"}我可以读取大多数键值,但其中一些我不能。
例如:
print(myfile['facter_networking']['domain']) - it works.
print(myfile['facter_networking']['fqdn']) - it works.
print(myfile['facter_networking']['hostname']) - it works.然而,如果我这样做了。
print(myfile['facter_networking']['interfaces']['ens192']['bindings']['address']) - It doens't work.另一方面,如果我这样做了:
print(myfile['facter_networking']['interfaces']我得到了结果:
{"ens192": {"bindings": [{"address": "20.9.8.1", "netmask": "255.255.255.221", "network": "20.33.50.62"}], "ip": "20.67.83.48", "mac": "00:00:06:0:e0:d6", "mtu": 1500, "netmask": "255.255.255.224", "network": "20.67.83.48"}, "ens224": {"bindings": [{"address": "20.67.83.48", "netmask": "20.67.83.48", "network": "20.67.83.48"}], "ip": "20.67.83.48", "mac": "20.67.83.48", "mtu": 1500, "netmask": "255.255.255.224", "network": "20.67.83.48"}, "lo": {"bindings": [{"address": "127.0.0.1", "netmask": "255.0.0.0", "network": "127.0.0.0"}], "ip": "127.0.0.1", "mtu": 65536, "netmask": "255.0.0.0", "network": "127.0.0.0"}}, "ip": "20.67.83.48", "mac": "00:00:00:9d:8f:d7", "mtu": 1500, "netmask": "255.255.255.224", "network": "20.67.83.48", "primary": "ens224"}你知道如何访问上面的这些值吗?
发布于 2020-07-26 00:15:42
快速修复:您的问题出在访问最后一个嵌套字典"address“。因为它在成为字典之前是嵌套在列表中的,所以你应该像这样得到它:
myfile['facter_networking']['interfaces']['ens192']['bindings'][insert desired index here]['address']更好的修复了:然而,你目前有一个巨大的设计问题。在dicts中嵌套dicts在dicts中的列表中嵌套dicts是一个嵌套地狱,它使调试正在发生的任何事情变得更加困难,从而阻止了您有效地编码。幸运的是,python是一种面向对象的语言!您可以将大多数字典替换为专用对象,有效地更好地管理您的代码,并减少将来发生类似错误的可能性。
发布于 2020-07-26 00:15:52
正如评论部分所说,{"bindings": [{"address"是一个列表。而且,和往常一样,如果您尝试使用索引访问空列表,它将抛出异常。相反,循环遍历它,以便在列表为空的情况下得到空列表作为结果
In [66]: [i["address"] for i in myfile['facter_networking']['interfaces']['ens192']['bindings']]
Out[66]: ['20.9.8.1']发布于 2020-07-26 00:13:42
问题是,您试图像访问字典一样访问列表:
...{"bindings": [{"address": "20.9.8.1...访问您需要的地址
....["bindings"][0]["address"]https://stackoverflow.com/questions/63090525
复制相似问题