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

时间:2016-09-01 12:11:14

标签: python list dictionary

这里我有一个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'}]
    ]

        ]

我已经尝试并获得了预期的输出,是否有任何pythonic方法来实现相同的目标?

代码:

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

1 个答案:

答案 0 :(得分:2)

不需要所有临时名单:

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]

基本上它只是遍历每个子项,并将其替换为第一项以及其他没有相同值的项。

虽然它很难看,但你甚至可以把它减少到单行(仅用于说明目的......我不推荐它,因为可读性):

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    LoginPath = "/account/login",
    AuthenticationScheme = "Cookies",
    AutomaticAuthenticate = true,
    AutomaticChallenge = true
});