首页 > 解决方案 > 在字典列表中按键保留重复项

问题描述

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

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]

我已经清楚我对这段代码的问题,但不能做正确的句子

标签: pythonpython-3.xlistdictionarylist-comprehension

解决方案


另一种简洁的方式使用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]

推荐阅读