Python遍历列表并将值附加到键

2024-09-28 22:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了这个循环,它在列表中迭代,其中包含嵌套在“groups”中的键“id”。 另一个列表也包含键“id”,但不是嵌套的。我要做的第一件事是验证它们是否相等。如果没有,则继续循环

我遇到的问题是,对于追加后的新列表,CAid多次相同。它们还被附加到另一个数组中并多次打印

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']
        }
    }
]

Tags: nameinid列表grouponelistda
2条回答

您可以通过字典理解来实现这一点:

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'}}]

当迭代遇到一个列表a和列表B,每个列表a和列表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']

相关问题 更多 >