![]() |
Python list - group by dict key - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Python list - group by dict key (/thread-22738.html) |
Python list - group by dict key - karthidec - Nov-25-2019 Pls help me on this python list with dict items query. I need to group these elements by name key. Input: [{'name': 'charlie', 'Ready For Dev': 2.0}, {'name': 'charlie', 'Ready for Release': 12.0}, {'name': 'john', 'Ready to Test': 2.0}, {'name': 'henry', 'Open': 8.0}, {'name': 'henry', 'Ready for Release': 16.0}] Expected Output: [{'name': 'charlie', 'Ready For Dev': 2.0, 'Ready for Release': 12.0}, {'name': 'john', 'Ready to Test': 2.0}, {'name': 'henry', 'Open': 8.0, 'Ready for Release': 16.0}] I have tried like below so far, but not getting my expected output. temp=[{'name': 'charlie', 'Ready For Dev': 2.0}, {'name': 'charlie', 'Ready for Release': 12.0}, {'name': 'john', 'Ready to Test': 2.0}, {'name': 'henry', 'Open': 8.0}, {'name': 'henry', 'Ready for Release': 16.0} ] names = ['charlie', 'john', 'henry'] for name in names: x=[] for item in temp: if item['name']==name: x.append(item) print (x) RE: Python list - group by dict key - perfringo - Nov-25-2019 Plan: 'get names, for every name get all dictionaries which have this name, chain them together and append to list' This takes advantage on collections.ChainMap which as name suggest chains mappings and fact that dictionary keys must be unique from collections import ChainMap records = [{'name': 'charlie', 'Ready For Dev': 2.0}, {'name': 'charlie', 'Ready for Release': 12.0}, {'name': 'john', 'Ready to Test': 2.0}, {'name': 'henry', 'Open': 8.0}, {'name': 'henry', 'Ready for Release': 16.0}] names = {row['name'] for row in records} # set of unique names new = [] # list to collect new dictionaries for name in names: new.append(dict(ChainMap(*(row for row in records if row['name'] == name)))Value of 'new' will be: One can express for-loop with oneliner:[dict(ChainMap(*(row for row in records if row['name'] == name))) for name in names] RE: Python list - group by dict key - buran - Nov-25-2019 you can use defaultdict temp=[{'name': 'charlie', 'Ready For Dev': 2.0}, {'name': 'charlie', 'Ready for Release': 12.0}, {'name': 'john', 'Ready to Test': 2.0}, {'name': 'henry', 'Open': 8.0}, {'name': 'henry', 'Ready for Release': 16.0} ] from collections import defaultdict combined = defaultdict(dict) for item in temp: combined[item['name']].update(item) print(list(combined.values()))
|