我在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
答案 0 :(得分:4)
您可以将defaultdict
与list
一起用作值类型,以便收集值:
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
要求输入序列是连续的,因此需要事先进行排序。