Python 使用.values()的JSON最后一个键级别的值错误
我试图从这个JSON文件中获取ip值,但没有指定每个元素的值,也没有使用fwt-maser2[ipv4][rtr][ip]。 使用.values方法。值[0]。值[0]。值[0]` 我得到的是netlen值24,而不是ip值,它实际上是第一个元素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":
为什么会发生这样的事情?我认为使用嵌套代码来查找键值是最好的方法……这样,您只需在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