为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2022-09-13 19:47:07
假设我有一个对象列表,我想删除具有相同副本的对象,然后保留具有idpublic: truerecipes = [       {'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},    ]蟒
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您可以使用 来检查该条目是否重复。count


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 [i['id'] for i in recipes].count (r['id']) == 1 or r['public']]


return list


查看完整回答
反对 回复 2022-09-13
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

这个答案有O(n)时间,希望它足够了:


ids={}  # Use a set to check for dups

l=[]    # Answer list

for 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)

抱歉,这不是一行,但我认为这是很好的做法:)


查看完整回答
反对 回复 2022-09-13
?
月关宝盒

TA贡献1772条经验 获得超5个赞

您可以先根据键以相反的顺序对列表进行排序,以便所有条目都位于顶部。然后执行列表理解以按顺序过滤掉唯一值:'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}]



查看完整回答
反对 回复 2022-09-13
  • 3 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信