我已将XML文件解析为我所拥有的字典
{'NY240': {'Enable_Notifications': 'Enabled',
'Interface': 'LAN 1/3/2',
'ID': '5058',
'Location': 'NY240'
'Speed': '0',
'Validity': '1',
'updateDate': '2018-02-05 14:02:57'},
'SF440': {'Enable_Notifications': 'Enabled',
'Interface': 'WAN 1/2/2',
'ID': '6353',
'Location': 'SF440'
'Speed': '1',
'Validity': '1',
'updateDate': '2018-02-08 16:02:57'},
...}
我得到了:
import xml.etree.ElementTree as ET
tree = ET.parse('data_file.xml')
root = tree.getroot()
dict_s = {}
for child in root:
for key in child:
td={}
for k in key:
td.update({k.tag: k.text})
if k.tag=='Location':
dict_s.update({k.text:td})
else:
pass
我知道我没有在这里粘贴XML文件,但我认为没有必要,它是简单的XML文件,任何比我更好的python字典迭代的人都可以从这里开始。 我需要的是选择那些内键'Interface'的值包含'WAN'(不是'startswith')的键(及其值)。在这种情况下,将是第二个,SF440。
我已经解决了这个问题,分开了:
new_td = {}
for key, value in dict_s.iteritems():
for k, v in value.iteritems():
if k=='Interface' and 'WAN' in v:
new_td.update({key: value})
但我正在寻找在顶级代码块中实现的解决方案,如果可能的话,不会分开?
答案 0 :(得分:1)
使用python dict comprehension
dict_s = {'NY240': {'Enable_Notifications': 'Enabled',
'Interface': 'LAN 1/3/2',
'ID': '5058',
'Location': 'NY240',
'Speed': '0',
'Validity': '1',
'updateDate': '2018-02-05 14:02:57'},
'SF440': {'Enable_Notifications': 'Enabled',
'Interface': 'WAN 1/2/2',
'ID': '6353',
'Location': 'SF440',
'Speed': '1',
'Validity': '1',
'updateDate': '2018-02-08 16:02:57'},
}
print dict((key, value) for key, value in dict_s.items() if 'WAN' in value.get('Interface', None))
<强>输出:强>
{'SF440': {'Validity': '1', 'Interface': 'WAN 1/2/2', 'Location': 'SF440', 'Enable_Notifications': 'Enabled', 'Speed': '1', 'ID': '6353', 'updateDate': '2018-02-08 16:02:57'}}