keep duplicates by key in a list of dictionaries

Another concise way using 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]

You could use the following list comprehension:

>>> [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'}]