如果列表中第一个dic的元素重复,则弹出整个dic?

2024-04-25 05:14:47 发布

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

这里我有一个dic的列表,在这里我想删除重复的,等于dic的第一个元素。 输入:

data  = [

    [
          [{'color': '1'},{'color': '0'},{'color': '2'},{'color': '1'}],
          [{'color': '2'},{'color': '3'},{'color': '2'},{'color': '5'}],
          [{'color': '1'},{'color': '1'},{'color': '3'},{'color': '3'}]
    ],

    [
          [{'color': '1'},{'color': '1'},{'color': '4'},{'color': '4'}],
          [{'color': '4'},{'color': '3'},{'color': '1'},{'color': '4'}],
          [{'color': '7'},{'color': '1'},{'color': '7'},{'color': '1'}]
    ]

        ]

我已经试过了,得到了预期的效果,有没有什么方法可以达到同样的效果?你知道吗

代码:

new = [] ; 
for i in data:
    master = []
    for j in i:
        temp = []
        for k in j:
            if j[0]['color'] != k['color']:
                temp.append(k)
        temp.insert(0,j[0])
        master.append(temp)
    new.append(master)
print(new)

预期产量:

data  = [

    [
          [{'color': '1'},{'color': '0'},{'color': '2'}],
          [{'color': '2'},{'color': '3'},{'color': '5'}],
          [{'color': '1'},{'color': '3'},{'color': '3'}]
    ],

    [
          [{'color': '1'},{'color': '4'},{'color': '4'}],
          [{'color': '4'},{'color': '3'},{'color': '5'}],
          [{'color': '7'},{'color': '1'},{'color': '1'}]
    ]     
    ]

Tags: 方法代码inmaster元素列表newfor
1条回答
网友
1楼 · 发布于 2024-04-25 05:14:47

不需要所有临时列表:

for item in data:
    for i,subitem in enumerate(item):
        item[i] = [item[i][0]] + [dct for dct in item[i][1:]
                                  if dct['color'] != item[i][0]['color']]

基本上,它只是遍历每个子项,并将其替换为第一个项加上其他不具有相同值的项。你知道吗

虽然它很难看,但您甚至可以将它简化为一行(仅用于说明目的。。。我不推荐它,因为可读性):

data = [[[item[i][0]] + [dct for dct in item[i][1:] if dct['color'] != item[i][0]['color']] for i,subitem in enumerate(item)] for item in data]

相关问题 更多 >