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

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)
抱歉,這不是一行,但我認為這是很好的做法:)

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}]
添加回答
舉報