问题:
我正在尝试从我的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类型。