我得到了这个循环,它遍历 list_one 包含嵌套在“groups”中的键“id”。 另一个 list_two 也包含键“id”但不是嵌套的。我做的第一件事是验证它们是否彼此相等。如果不是,则继续循环。
我遇到的问题是,对于 new_list 追加后,CA
id 多次相同。它们也被附加到另一个数组中并多次打印。
list_one = [
{
'name': 'CA',
'group':
{
'id': ['a12345', 'aa12']
}
},
{
'name': 'TE',
'group':
{
'id': ['b12345']
}
},
{
'name': 'DA',
'group':
{
'id': ['cab124']
}
}
]
list_two = [
{
'name': 'CA',
'id': ['ac123', 'bb12345']
},
{
'name': 'TE',
'id': 'abc123'
},
{
'name': 'DA',
'id': 'e123'
}
]
for list_A in list_one: # list_one is a list
for list_B in list_two: # list_two is a list
if list_A['name'] == list_B['name']:
if list_B['id'] not in list_A['group']['id']: #list_A and #list_B are a dictionary
for index, ids in enumerate(list_A['group']['id']): # using tuple to assign the values using the index
list_A['group']['id'][index] = list_B['id']
new_list.append(list_A)
我得到的输出:
[
{
'name': 'CA',
'group': {
'id':
[
['ac123', 'bb12345'],
['ac123', 'bb12345']
]
}
},
{
'name': 'TE',
'group': {
'id': [
['abc123']
]
}
},
{
'name': 'DA',
'group': {
'id': [
['e123']
]
}
}
]
预期输出:
[
{
'name': 'CA',
'group': {
'id': ['ac123', 'bb12345']
}
},
{
'name': 'TE',
'group': {
'id': ['abc123']
}
},
{
'name': 'DA',
'group': {
'id': ['e123']
}
}
]
答案 0 :(得分:0)
您可以使用字典理解来做到这一点:
result = list()
for d in list_one:
#only keep the dictionary from list_two where the name matches
other = [o for o in list_two if o["name"]==d["name"]][0]
result.append({"name": d["name"], "group": {"id": other["id"]}})
>>> result
[{'name': 'CA', 'group': {'id': ['ac123', 'bb12345']}},
{'name': 'TE', 'group': {'id': 'abc123'}},
{'name': 'DA', 'group': {'id': 'e123'}}]
答案 1 :(得分:0)
当迭代遇到一个list_A和list_B时,每个都带有'name':'CA'
; list_B['id']
是一个包含两个项目的列表。
list_B['id'] 是一个包含两个项目的列表
list_two[0]['id'] --> ['ac123', 'bb12345']
listA['group']['id'] 是一个包含两个项目的列表
list_one[0]['group']['id'] --> ['a12345', 'aa12']
这部分代码迭代两次并将 ['ac123', 'bb12345']
分配给 listA['group']['id']
的每一项
for index, ids in enumerate(list_A['group']['id']): # using tuple to assign the values using the index
list_A['group']['id'][index] = list_B['id']
就像这样做
>>> a = [1,2]
>>> b = ['a','b']
>>> for i,item in enumerate(a):
... print(i,item)
... a[i] = b
...
0 1
1 2
>>> a
[['a', 'b'], ['a', 'b']]
进行此更改:
if list_B['id'] not in list_A['group']['id']: #list_A and #list_B are a dictionary
list_A['group']['id'] = list_B['id']