<p>两种解决方案,一种使用dict,另一种通过排序和分组:</p>
<pre><code>from itertools import groupby
my_list = [
{"id": "UU7t", "updated_at": "2020-01-06_16-40-00", "summary": "Renewed"},
{"id": "yT8h", "updated_at": "2020-01-07_18-24-22", "summary": "Renewed"},
{"id": "i8Po", "updated_at": "2020-01-08_13-16-36", "summary": "Renewed"},
{"id": "yT8h", "updated_at": "2020-01-13_18-24-05", "summary": "Deleted"},
{"id": "7uYg", "updated_at": "2020-01-18_23-37-19", "summary": "Transferred"},
]
def newest_id(seq):
"""Keep id with most recent updated_at
Return a list of kept items.
"""
td = {}
for e in seq:
key = e['id']
if key not in td or td[key]['updated_at'] < e['updated_at']:
td[key] = e
return list(td.values())
def newest_id2(seq):
"""Keep id with most recent updated_at
Return a sorted list of kept items.
"""
tl = sorted(seq, key=lambda e: (e['id'], e['updated_at']), reverse=True)
return [next(g) for _, g in groupby(tl, key=lambda e: e['id'])]
res1 = newest_id(my_list)
res2 = newest_id2(my_list)
# Check result
res1.sort(key=lambda e: e['id'], reverse=True)
print(res1 == res2)
</code></pre>