如何用单行Python代码按id对字典列表去重(保留任意记录)?
按ID去重字典列表的单行Python实现
要实现按id去重并保留任意一条记录,直接利用字典键的唯一性就能搞定,单行代码如下:
list({item['id']: item for item in [{'id': 1, 'name': 'Sam'}, {'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Mark'}, {'id': 2, 'name': 'Jane'}]}.values())
原理说明
- 字典推导式
{item['id']: item for item in 原列表}会遍历原列表,把每个字典的id作为键、字典本身作为值。由于字典的键不能重复,后续遇到相同id的字典会覆盖之前的条目,最终每个id只会保留最后一次出现的记录。 - 最后用
list(...)把字典的values()转换成列表,就得到了去重后的结果。
如果想保留每个id第一次出现的记录,只需先反转原列表,处理后再反转回来:
list({item['id']: item for item in reversed([{'id': 1, 'name': 'Sam'}, {'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Mark'}, {'id': 2, 'name': 'Jane'}])}.values())[::-1]
内容的提问来源于stack exchange,提问作者StackUser
相关产品推荐
相关产品推荐

