[英]Update List within Dict values
How do I append the dict within the list? 如何将字典添加到列表中?
For example, I have data as follows: 例如,我的数据如下:
[{
"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",
}
}
]
}]
I would like to pull only data ifName
and IP
. 我只想提取数据ifName
和IP
。 Here I would like to get: 在这里我想得到:
[{'int': 'Vlan1', 'address': '192.168.1.1'},{'int': 'Vlan2', 'address': '192.168.1.3'},{'int': 'Vlan3', 'address': '192.168.1.3'}]
CODE: 码:
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'])
It's been overwriting old, not able to update it. 它已经覆盖了旧的,无法更新。
Use the following list comprehension: 使用以下列表理解:
[{'int': d['invals'][0]['ifName'], 'address': d['invals'][0]['pairs']['IP']} for d in l]
Output: 输出:
[{'int': 'Vlan1', 'address': '192.168.1.1'},
{'int': 'Vlan2', 'address': '192.168.1.2'},
{'int': 'Vlan3', 'address': '192.168.1.3'}]
Note: this assumes you are keeping the same structure in every element of your list. 注意:这假定您在列表的每个元素中都保持相同的结构。
Your code overwrites first element of out
every loop because you are referring to out[0]
each time. 您的代码覆盖的第一要素out
每一个循环,因为你是指out[0]
各一次。 Assuming you are trying to get list of unique interfaces with set IP you might want to use something like 假设您尝试获取具有设置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'}]
''
is evaluated as False
''
被评估为False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.