用Python从JSON数据创建列表和字典

6
我正在编写一个脚本通过REST获取一些库存数据。然后,我想要对其进行过滤以创建一个列表和两个字典,这些可以在我的脚本的其他地方使用。
例如,从这里开始:
{'version': '0.0'
 'response': [{'chassisType': 'C800',
           'family': 'C897VA-K9',
           'hostname': 'chaney-xtr',
           'imageName': 'c800-universalk9-mz.SPA.154-2.T.bin',
           'interfaceCount': '10',
           'lastUpdated': '2014-06-03 01:39:19.855491-07',
           'lineCardId': 'e5bddd56-2194-4b83-8ae5-597893800051',
           'macAddress': '88:5A:92:A4:E7:C8',
           'managementIpAddress': '192.168.2.1',
           'memorySize': '988236K/60339K',
           'networkDeviceId': 'e15789bd-47df-4df9-809f-daf81d15ff2a',
           'numUpdates': 1,
           'platformId': 'C897VA-K9',
           'portRange': 'ATM0, ATM0.1, BRI0, BRI0:1-2, Dialer1, Ethernet0, GigabitEthernet0-8, LISP0, Loopback0-1, NVI0, Virtual-Access1, Virtual-Template1, Vlan1',
           'role': 'Unknown',
           'roleSource': 'auto',
           'serialNumber': 'FGL175124DX',
           'softwareVersion': '15.4(2)T',
           'type': 'UNKNOWN',
           'upTime': '2 weeks, 3 days, 18 hours, 2 minutes',
           'vendor': 'Cisco'},
          {'chassisType': 'C800',
           'family': 'C897VA-K9',
           'hostname': 'chaney-xtr2',
           'imageName': 'c800-universalk9-mz.SPA.154-2.T.bin',
           'interfaceCount': '10',
           'lastUpdated': '2014-06-03 01:39:19.855491-07',
           'lineCardId': 'e5bddd56-2194-4b83-8ae5-597893800051',
           'macAddress': '88:5A:92:A4:E7:C8',
           'managementIpAddress': '192.168.2.2',
           'memorySize': '988236K/60339K',
           'networkDeviceId': 'e15789bd-47df-4df9-809f-daf81d15ff2a',
           'numUpdates': 1,
           'platformId': 'C897VA-K9',
           'portRange': 'ATM0, ATM0.1, BRI0, BRI0:1-2, Dialer1, Ethernet0, GigabitEthernet0-8, LISP0, Loopback0-1, NVI0, Virtual-Access1, Virtual-Template1, Vlan1',
           'role': 'Unknown',
           'roleSource': 'auto',
           'serialNumber': 'XGL175124D3',
           'softwareVersion': '15.4(2)T',
           'type': 'UNKNOWN',
           'upTime': '2 weeks, 3 days, 18 hours, 2 minutes',
           'vendor': 'Cisco'}],
 }

我希望在"platformId" = "C897VA-K9"的情况下,能够从managementIpAddress中创建一个IP地址列表,并使用IP地址作为键创建两个字典。

dict1 = {"managementIpAddress": "hostname"}
dict2 = {"managementIpAddress": "platformId"}

你如何去做这个?

祝好,

Ryan


4
你尝试过哪些方法? - cwallenpoole
你尝试过Python文档吗?https://docs.python.org/2/library/json.html - Matt Coubrough
正如@cwallenpoole所提到的,您应该分享一下您迄今为止尝试过的内容,以及具体在哪里遇到了困难。 - dano
2个回答

2
from_this = {"version":"0.0","response":[{"macAddress":"88:5A:92:A4:E7:C8","networkDeviceId":"e15789bd-47df-4df9-809f-daf81d15ff2a","lineCardId":"e5bddd56-2194-4b83-8ae5-597893800051","lastUpdated":"2014-06-03 01:39:19.855491-07","platformId":"C897VA-K9","vendor":"Cisco","numUpdates":1,"interfaceCount":"10","portRange":"ATM0, ATM0.1, BRI0, BRI0:1-2, Dialer1, Ethernet0, GigabitEthernet0-8, LISP0, Loopback0-1, NVI0, Virtual-Access1, Virtual-Template1, Vlan1","roleSource":"auto","chassisType":"C800","softwareVersion":"15.4(2)T","upTime":"2 weeks, 3 days, 18 hours, 2 minutes","imageName":"c800-universalk9-mz.SPA.154-2.T.bin","memorySize":"988236K/60339K","managementIpAddress":"192.168.2.1","family":"C897VA-K9","type":"UNKNOWN","serialNumber":"FGL175124DX","role":"Unknown","hostname":"chaney-xtr"}, {"macAddress":"88:5A:92:A4:E7:C8","networkDeviceId":"e15789bd-47df-4df9-809f-daf81d15ff2a","lineCardId":"e5bddd56-2194-4b83-8ae5-597893800051","lastUpdated":"2014-06-03 01:39:19.855491-07","platformId":"C897VA-K9","vendor":"Cisco","numUpdates":1,"interfaceCount":"10","portRange":"ATM0, ATM0.1, BRI0, BRI0:1-2, Dialer1, Ethernet0, GigabitEthernet0-8, LISP0, Loopback0-1, NVI0, Virtual-Access1, Virtual-Template1, Vlan1","roleSource":"auto","chassisType":"C800","softwareVersion":"15.4(2)T","upTime":"2 weeks, 3 days, 18 hours, 2 minutes","imageName":"c800-universalk9-mz.SPA.154-2.T.bin","memorySize":"988236K/60339K","managementIpAddress":"192.168.2.2","family":"C897VA-K9","type":"UNKNOWN","serialNumber":"XGL175124D3","role":"Unknown","hostname":"chaney-xtr2"}]}

dict1 = {}
dict2 = {}

for response_item in from_this['response']:
    dict1[response_item['managementIpAddress']] = response_item['hostname']
    dict2[response_item['managementIpAddress']] = response_item['platformId']

输出结果如下:
In[189]: dict1
Out[187]: {'192.168.2.1': 'chaney-xtr', '192.168.2.2': 'chaney-xtr2'}
In[190]: dict2
Out[188]: {'192.168.2.1': 'C897VA-K9', '192.168.2.2': 'C897VA-K9'}

如果这正是您要找的内容,请告诉我是否有任何问题。

哇!太快了。谢谢Krishan,非常有帮助。对于那些问过的人,我发现Python文档很难理解,但是我在这个网站上找到了这个答案,也非常有帮助: http://stackoverflow.com/questions/23024477/retrieving-items-from-a-dictionary-data-type-created-from-a-json-request。 - user3709511

0

您可以解析JSON数据,然后添加一些if和else语句来判断是否需要数据;然后使用eval语句生成一个字典。


1
如果您详细阐述并提供示例代码,您的答案将更加清晰明了。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接