Można skorzystać z itertools.groupby:
from itertools import groupby
from operator import itemgetter
from pprint import pprint
data = [ {
'Organization' : '123 Solar',
'Phone' : '444-444-4444',
'Email' : '',
'website' : 'www.123solar.com'
}, {
'Organization' : '123 Solar',
'Phone' : '',
'Email' : '[email protected]',
'Website' : 'www.123solar.com'
},
{
'Organization' : '234 test',
'Phone' : '111',
'Email' : '[email protected]',
'Website' : 'b.123solar.com'
},
{
'Organization' : '234 test',
'Phone' : '222',
'Email' : '[email protected]',
'Website' : 'bd.123solar.com'
}]
data = sorted(data, key=itemgetter('Organization'))
result = {}
for key, group in groupby(data, key=itemgetter('Organization')):
result[key] = [item for item in group]
pprint(result)
drukuje:
{'123 Solar': [{'Email': '',
'Organization': '123 Solar',
'Phone': '444-444-4444',
'website': 'www.123solar.com'},
{'Email': '[email protected]',
'Organization': '123 Solar',
'Phone': '',
'Website': 'www.123solar.com'}],
'234 test': [{'Email': '[email protected]',
'Organization': '234 test',
'Phone': '111',
'Website': 'b.123solar.com'},
{'Email': '[email protected]',
'Organization': '234 test',
'Phone': '222',
'Website': 'bd.123solar.com'}]}
UPD:
Oto co można zrobić, aby grupy elementy w jeden dyktat:
for key, group in groupby(data, key=itemgetter('Organization')):
result[key] = {'Phone': [],
'Email': [],
'Website': []}
for item in group:
result[key]['Phone'].append(item['Phone'])
result[key]['Email'].append(item['Email'])
result[key]['Website'].append(item['Website'])
następnie w result
będziesz mieć:
{'123 Solar': {'Email': ['', '[email protected]'],
'Phone': ['444-444-4444', ''],
'Website': ['www.123solar.com', 'www.123solar.com']},
'234 test': {'Email': ['[email protected]', '[email protected]'],
'Phone': ['111', '222'],
'Website': ['b.123solar.com', 'bd.123solar.com']}}
Przetestowałem Twój kod i nie jest to dokładnie to, czego potrzebuję. Dzięki za pokazanie mi tego rodzaju, to było niesamowite. Szukam sposobu na połączenie wszystkich słowników o tej samej nazwie organizacji do jednego słownika na tej samej liście. –
Oczywiście, możesz z tego zrobić jeden słownik. Po prostu użyj tej zmiennej 'group'. – alecxe
@ Jacob-IT, zaktualizowałem odpowiedź, sprawdź. – alecxe