Python 使用.values()的JSON最后一个键级别的值错误

Python 使用.values()的JSON最后一个键级别的值错误,python,dictionary,Python,Dictionary,我试图从这个JSON文件中获取ip值,但没有指定每个元素的值,也没有使用fwt-maser2[ipv4][rtr][ip]。 使用.values方法。值[0]。值[0]。值[0]` 我得到的是netlen值24,而不是ip值,它实际上是第一个元素 为什么会发生这样的事情?我认为使用嵌套代码来查找键值是最好的方法……这样,您只需在dict中搜索广播键,然后打印其值 请在此处尝试以下操作:如果您只知道目标密钥是ip,则可以使用递归: "fwt-master2": { "ipv4":

我试图从这个JSON文件中获取ip值,但没有指定每个元素的值,也没有使用fwt-maser2[ipv4][rtr][ip]。 使用.values方法。值[0]。值[0]。值[0]`

我得到的是netlen值24,而不是ip值,它实际上是第一个元素


为什么会发生这样的事情?

我认为使用嵌套代码来查找键值是最好的方法……这样,您只需在dict中搜索广播键,然后打印其值
请在此处尝试以下操作:

如果您只知道目标密钥是ip,则可以使用递归:

"fwt-master2": {
        "ipv4": {
                "rtr": {
                        "ip": "1.2.3.4",
                        "net": "3.4.5.6",
                        "netlen": "24",
                        "netmask": "255.255.255.0",
                        "broadcast": "7.8.9.1"
                }
        }
输出:

s = {"fwt-master2": {
    "ipv4": {
            "rtr": {
                    "ip": "1.2.3.4",
                    "net": "3.4.5.6",
                    "netlen": "24",
                    "netmask": "255.255.255.0",
                    "broadcast": "7.8.9.1"
            }
    }
  }
}

def get_ip(d):
   return [i for c in filter(None, [b if a == 'ip' else get_ip(b) if isinstance(b, dict) else None for a, b in d.items()]) for i in c]

print(''.join(get_ip(s)))

我决定翻阅一下你的字典,发现它不完整

你的字典:

1.2.3.4
实际上应该是这样的:添加了缺少的花括号。。。前两个和后两个

 "fwt-master2": {
            "ipv4": {
                    "rtr": {
                            "ip": "1.2.3.4",
                            "net": "3.4.5.6",
                            "netlen": "24",
                            "netmask": "255.255.255.0",
                            "broadcast": "7.8.9.1"
                    }
            }
好吧,碰巧。。。因此,有趣的是,上面更新的一本是实际的字典,下面是如何实现您的目标:

{"fwt-master2": { "ipv4": { "rtr": { "ip": "1.2.3.4", "net": "3.4.5.6", "netlen": "24", "netmask": "255.255.255.0", "broadcast": "7.8.9.1" }}}}

不使用fwt-maser2[ipv4][rtr][ip]享受乐趣

为什么?如果您设置了这样的任意限制,至少要提供一个解释。否则这听起来像是XY问题。Python字典没有设置顺序。你不能依赖什么元素将成为第一个元素。这里不要使用dict.values,使用键。字典没有顺序。当前执行中的第0个元素可能是下一次执行中的最后一个元素。如果我有两个二级键,如何获取其中一个特定键的值?
>>> d = {"fwt-master2": { "ipv4": { "rtr": { "ip": "1.2.3.4", "net": "3.4.5.6", "netlen": "24", "netmask": "255.255.255.0", "broadcast": "7.8.9.1" }}}}
>>> obj = []
>>> obj.append(d)
>>> obj
[{'fwt-master2': {'ipv4': {'rtr': {'net': '3.4.5.6', 'netlen': '24', 'ip': '1.2.3.4', 'netmask': '255.255.255.0', 'broadcast': '7.8.9.1'}}}}]
>>> key_list = ['netmask', 'broadcast', 'ip', 'net']
>>> def recursive_items(dictionary):
...     for key, value in dictionary.items():
...         if type(value) is dict:
...             yield from recursive_items(value)
...         else:
...             yield (key, value)
...
>>> def find_key(obj):
...     for e in obj:
...         for key, value in recursive_items(e):
...             if key in key_list:
...                 print(key, value)
...         for key, value in recursive_items(e):
...             if key in key_list and value == 0:
...                 print(double_quote(key),":", value)
...
>>> find_key(obj)
net 3.4.5.6
ip 1.2.3.4
netmask 255.255.255.0
broadcast 7.8.9.1