json搜索python中的id()函数冲突



问题:

我正在尝试从我的json值中搜索dns名称,并返回设备id。

json导出如下所示:

[{'id': 1,'dnsName': 'Server01.dnsexample.local'}]

当我试图编写一个for循环来查找dns名称值并打印出相应的设备id时,Python会与is builded id((函数混淆。

这是我的代码:

find_deviceid = input("Enter System name or Dns Name of the computer you are trying to search: ")
for id, dnsName in napidevices[0].items():
if dnsName == find_deviceid:
print(id)
print(dnsName)

结果:

Enter System name or Dns Name of the computer you are trying to search: Server01.dnsexample.local
dnsName # this should say 1
Server01.dnsexample.local # this is correct

有什么方法可以停止运行内置函数,而不是使用字典中的键值对?

感谢您抽出时间,

您需要使用显式获取id密钥的值

napidevices[0].get('id')  # or napidevices[0]['id']

使用for id, dnsName in napidevices[0].items(),您将在字典的特定键、值对上进行迭代。因此,在这种情况下,打印id将打印密钥,即dnsName

此外,不确定为什么只显式迭代列表的第一个元素,可以迭代列表以保持其通用性,如:

find_deviceid = 'Server01.dnsexample.local'
napidevices = [{'id': 1,'dnsName': 'Server01.dnsexample.local'}]
for device in napidevices:
for idx, dnsName in device.items():
if dnsName == find_deviceid:
print(device.get('id'))
print(dnsName)

您还可以简化代码以直接获得dnsName,而不是使用items()在键值对上迭代为:

for device in napidevices:
dnsName = device.get('dnsName', None) # get the dnsName value
if dnsName == find_deviceid:
print(device.get('id'))
print(dnsName)

您不应该在python构建的函数中使用相同的变量名

python-dict有一个get方法可以满足您的需求。

find_deviceid = input("Enter System name or Dns Name of the computer you are trying to search: ")
find_deviceid = int(find_deviceid)
for item in napidevices:
id_ = item.get('id')
if id_ == find_deviceid:
print(id_)
print(dnsName)

顺便说一句,你的代码可以在py2或py3中运行,但如果你使用py3,find_deviceid的输入是字符串类型,你需要手动将其转换为int类型。

相关内容

  • 没有找到相关文章