Python - 从字典列表中删除重复键

时间:2016-05-10 11:55:22

标签: python list dictionary duplicates

我在Python中有一个词典列表:

[{u'value': u'firstname', u'key': u'Coach'}, 
 {u'value': u'lastname', u'key': u'Coach'}, 
 {u'value': u'age', u'key': u'Coach'}, 
 {u'value': u'firstname', u'key': u'Player'}, 
 {u'value': u'league', u'key': u'Player'}]

如何从字典列表中删除重复的,并将其值合并到一个列表中,如下所示:

l = [('Coach', ['firstname', 'lastname', 'age']), 
     ('Player', ['firstname', 'league'])]

迭代列表项

for k, v in l:
    print k, v

2 个答案:

答案 0 :(得分:4)

您可以将defaultdictlist一起用作值类型,以便收集值:

In [5]: from collections import defaultdict

In [6]: data = [{u'value': u'firstname', u'key': u'Coach'}, 
 {u'value': u'lastname', u'key': u'Coach'}, 
 {u'value': u'age', u'key': u'Coach'}, 
 {u'value': u'firstname', u'key': u'Player'}, 
 {u'value': u'league', u'key': u'Player'}]

In [7]: l = defaultdict(list)

In [8]: for row in data:
   ...:     l[row['key']].append(row['value'])
   ...:     

In [9]: l
Out[9]: 
defaultdict(list,
            {'Coach': ['firstname', 'lastname', 'age'],
             'Player': ['firstname', 'league']})

然后您可以使用items方法轻松地将字典转换为元组列表:

In [10]: list(l.items())
Out[10]: 
[('Coach', ['firstname', 'lastname', 'age']),
 ('Player', ['firstname', 'league'])]

答案 1 :(得分:3)

[(k, [x['value'] for x in v]) for k, v in itertools.groupby(sorted(data, key=lambda x: x['key']), lambda d: d['key'])]

groupby位于标准模块itertools中。

修改 感谢@soon指出itertools.groupby要求输入序列是连续的,因此需要事先进行排序。