【问题标题】:Iterate and Filter Python dictionary迭代和过滤 Python 字典
【发布时间】:2018-07-30 17:25:33
【问题描述】:

我已经将一个 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字典迭代方面比我好一点的人都可以从这里开始。 我需要的是选择那些键(和它们的值),其中内部键“接口”的值包含“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})

但我正在寻找在顶部代码块中实现的解决方案,如果可能的话不分开?

【问题讨论】:

    标签: python dictionary elementtree


    【解决方案1】:

    使用pythondict 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'}}
    

    【讨论】:

      猜你喜欢
      • 2014-05-29
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 2016-02-21
      • 2019-05-16
      • 2021-11-29
      相关资源
      最近更新 更多