繁体   English   中英

在Dict值内更新列表

[英]Update List within Dict values

如何将字典添加到列表中?

例如,我的数据如下:

  [{
    "data": "11_1",
    "invals": [
      {
        "num1": "1111111",
        "ifName": "Vlan1",
        "pairs": {
          "TYPE": "3",
          "IS_TYPE": "level-2",
          "IP": "192.168.1.1",
        }
      }
    ]
  },
  {
    "data": "11_2",
    "invals": [
      {
        "num1": "2222222",
        "ifName": "Vlan2",
        "pairs": {
          "TYPE": "3",
          "IS_TYPE": "level-2",
          "IP": "192.168.1.2",
        }
      }
    ]
  },
  {
    "data": "11_3",
    "invals": [
      {
        "num1": "33333333",
        "ifName": "Vlan3",
        "pairs": {
          "TYPE": "3",
          "IS_TYPE": "level-2",
          "IP": "192.168.1.3",
        }
      }
    ]
  }]

我只想提取数据ifNameIP 在这里我想得到:

[{'int': 'Vlan1', 'address': '192.168.1.1'},{'int': 'Vlan2', 'address': '192.168.1.3'},{'int': 'Vlan3', 'address': '192.168.1.3'}]

码:

    out = [{ 'int': '', 'address': '' }]
        for x in output:
            for i in x['invals']:
                if id == i['num1'] and 'IP' in i['pairs']:
                    if not i['pairs']['IP'] is '':
                        out[0]['interface'] = i['ifName']
                        out[0]['address'] = i['pairs']['IP']
                        if not i['ifName'] in out[0]['interface']:
                            out[0]['interface'].update(i['ifName'])
                            out[0]['address'].update(i['pairs']['IP'])

它已经覆盖了旧的,无法更新。

使用以下列表理解:

[{'int': d['invals'][0]['ifName'], 'address': d['invals'][0]['pairs']['IP']} for d in l]

输出:

[{'int': 'Vlan1', 'address': '192.168.1.1'},
 {'int': 'Vlan2', 'address': '192.168.1.2'},
 {'int': 'Vlan3', 'address': '192.168.1.3'}]

注意:这假定您在列表的每个元素中都保持相同的结构。

您的代码覆盖的第一要素out每一个循环,因为你是指out[0]各一次。 假设您尝试获取具有设置IP的唯一接口的列表,则可能需要使用类似

result = []
saved_interfaces = []
for item in data:
  for inval in item['invals']:
    if id == i['num1'] and 'IP' in i['pairs']:
      if inval['pairs']['IP'] and inval['ifName'] not in saved_interfaces:
        result.append({'int':inval['ifName'],'address':inval['pairs']['IP']})
        saved_interfaces.append(inval['ifName'])
#print(result)
#[{'int': 'Vlan1', 'address': '192.168.1.1'}, {'int': 'Vlan2', 'address': '192.168.1.2'}, {'int': 'Vlan3', 'address': '192.168.1.3'}]

''被评估为False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM