猿问

使用Python从列表中删除特定的重复项

假设我有一个对象列表,我想删除具有相同副本的对象,然后保留具有idpublic: true


recipes = [

       {'id': 1, 'public': True}, 

       {'id': 1, 'public': False}, 

       {'id': 2, 'public': False}, 

       {'id': 3, 'public': True},

       {'id': 3, 'public': False}

    ]


list_ = []

[list_.append(r) for r in recipes if r.id not in list_]


print(list_)

要添加的第二个条件是什么?


想要的结果:


    recipes = [

       {'id': 1, public: True},  

       {'id': 2, public: False}, 

       {'id': 3, public: True},

    ]


慕田峪9158850
浏览 124回答 3
3回答

慕尼黑的夜晚无繁华

您可以使用 来检查该条目是否重复。countrecipes = [   {'id': 1, 'public': True},    {'id': 1, 'public': False},    {'id': 2, 'public': False},    {'id': 3, 'public': True},   {'id': 3, 'public': False}]list = [][list.append(r) for r in recipes if [i['id'] for i in recipes].count (r['id']) == 1 or r['public']]return list

梵蒂冈之花

这个答案有O(n)时间,希望它足够了:ids={}  # Use a set to check for dupsl=[]    # Answer listfor i in recipes: # O(n) time    if i['id'] in ids:        if i['public']:              ids[i['id']]=i    else:        ids[i['id']]=len(l)  # renumber the index for later O(1) use                             # len(l) is a O(1) function, so no need to keep a counter        l.append(i)抱歉,这不是一行,但我认为这是很好的做法:)

月关宝盒

您可以先根据键以相反的顺序对列表进行排序,以便所有条目都位于顶部。然后执行列表理解以按顺序过滤掉唯一值:'public''public': True'id'recipes = [{'id': 1, 'public': True},            {'id': 1, 'public': False},            {'id': 2, 'public': False},            {'id': 3, 'public': True},           {'id': 3, 'public': False}]recipes.sort(key = lambda r: r['public'], reverse=True)recipes_unique = [][recipes_unique.append(r) for r in recipes if     r['id'] not in [s['id'] for s in recipes_unique]]display(recipes_unique)这提供了所需的结果(如有必要,您当然可以再次排序):'id'[{'id': 1, 'public': True}, {'id': 3, 'public': True}, {'id': 2, 'public': False}]
随时随地看视频慕课网APP

相关分类

Python
我要回答