python-3.x - python - 在字典列表中,按键保存重复项

我有一个字典列表,我想获得那些键值相同的字典:


my_list_of_dicts = [{


 'id': 3,


 'name': 'John'


 },{


 'id': 5,


 'name': 'Peter'


 },{


 'id': 2,


 'name': 'Peter'


 },{


 'id': 6,


 'name': 'Mariah'


 },{


 'id': 7,


 'name': 'John'


 },{


 'id': 1,


 'name': 'Louis'


 }


]



我想保留那些具有相同'名称'的项目,所以,我想获得类似:


duplicates: [{


 'id': 3,


 'name': 'John'


 },{


 'id': 5,


 'name': 'Peter'


 },{


 'id': 2,


 'name': 'Peter'


 }, {


 'id': 7,


 'name': 'John'


 }


]



我尝试过(不成功):


duplicates = [item for item in my_list_of_dicts if len(my_list_of_dicts.get('name', None)) > 1]



时间: 原作者:

使用collections.Counter的另一种简洁方法:


from collections import Counter



my_list_of_dicts = [{


 'id': 3,


 'name': 'John'


 },{


 'id': 5,


 'name': 'Peter'


 },{


 'id': 2,


 'name': 'Peter'


 },{


 'id': 6,


 'name': 'Mariah'


 },{


 'id': 7,


 'name': 'John'


 },{


 'id': 1,


 'name': 'Louis'


 }


]



c = Counter(x['name'] for x in my_list_of_dicts)



duplicates = [x for x in my_list_of_dicts if c[x['name']] > 1]



原作者:

你可以使用以下列表推导:


>>> [d for d in my_list_of_dicts if len([e for e in my_list_of_dicts if e['name'] == d['name']]) > 1]


[{'id': 3, 'name': 'John'},


 {'id': 5, 'name': 'Peter'},


 {'id': 2, 'name': 'Peter'},


 {'id': 7, 'name': 'John'}]



原作者:
...