[英]Grouping list by unique values
I have a list 我有一个清单
list = [{'album': 'Spring Times', 'artist': 'Momo Pulse'}, {'album': 'Spring Times', 'artist': 'K.oshkin'}, {'album': 'Damn ', 'artist': 'Florent B'}]
I want to group it to get: 我想将其分组以获得:
list = [{'album': 'Spring Times', 'artist1': 'Momo Pulse', 'artist2': 'K.oshkin'}, {'album': 'Damn ', 'artist1': 'Florent B'}]
How can I do that? 我怎样才能做到这一点? Any ideas?
有任何想法吗?
from itertools import groupby
# input
my_list = [{'album': 'Spring Times', 'artist': 'Momo Pulse'}, {'album': 'Spring Times', 'artist': 'K.oshkin'}, {'album': 'Damn ', 'artist': 'Florent B'}]
# Have a function to return the merged dictionary after an update
def merge_dict(a, b):
a.update(b)
return a
# key function for sort and groupby
sortkey = lambda d: d['album']
# Sort and group by album
my_groups = groupby(sorted(my_list, key=sortkey), key=sortkey)
# Generate output
print [merge_dict({'album':k},{'artist'+str(i+1):d['artist'] for i, d in enumerate(g)}) for k, g in my_groups]
from collections import defaultdict
l = [{'album': 'Spring Times', 'artist': 'Momo Pulse'},
{'album': 'Spring Times', 'artist': 'K.oshkin'},
{'album': 'Damn ', 'artist': 'Florent B'}]
d = defaultdict(list)
for record in l:
d[record['album']].append(record['artist'])
We now have a dictionary mapping album names to a list of artists. 现在,我们有了一个字典,将专辑名称映射到艺术家列表。
final = []
for album, artists in d.items():
temp = {'album': album}
for i, x in enumerate(artists, start=1):
temp['artist{}'.format(i)] = x
final.append(temp)
print(final)
prints 版画
[{'album': 'Damn ', 'artist1': 'Florent B'}, {'album': 'Spring Times', 'artist1': 'Momo Pulse', 'artist2': 'K.oshkin'}]
l = [{'album': 'Spring Times', 'artist': 'Momo Pulse'}, {'album': 'Spring Times', 'artist': 'K.oshkin'}, {'album': 'Damn ', 'artist': 'Florent B'}]
albums = {}
for el in l:
album = albums.setdefault(el['album'], {})
artist_id = sum(1 for k in album if k.startswith('artist'))
album['artist'+str(artist_id)] = el['artist']
l2 = albums.values() #This is your output
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.