Словарь Python. Если ключ одинаков, создайте список соответствующих значений (строковый тип данных)

У меня есть тип данных, который выглядит так:

{'name': 'brian', 'location': 'Brookings, OR'}
{'name': 'brian', 'location': 'Medford, OR'}
{'name': 'tommy', 'location': 'Portland, OR'}
{'name': 'tommy', 'location': 'Medford, OR'}
{'name': 'tommy', 'location': 'Oklahoma City, OK'}

Что я хотел бы сделать, так это то, что если ключ (имя) один и тот же, я создаю список соответствующих значений следующим образом:

{'name': 'brian', 'location': ['Brookings, OR', 'Medford, OR']}
{'name': 'tommy', 'location': ['Portland, OR', 'Medford, OR', 'Oklahoma City, OK']}

Я сделал это с целочисленными типами данных, добавив значения вместе, если ключ был таким же, но я не могу понять это. Любая помощь высоко ценится.


person will    schedule 29.10.2020    source источник


Ответы (1)


Принимая во внимание список, в который входят ваши словари:

l=[{'name': 'brian', 'location': 'Brookings, OR'},
{'name': 'brian', 'location': 'Medford, OR'},
{'name': 'tommy', 'location': 'Portland, OR'},
{'name': 'tommy', 'location': 'Medford, OR'},
{'name': 'tommy', 'location': 'Oklahoma City, OK'}]

вы можете сделать следующее:

res=[{'name':i, 'location':[k['location'] for k in l if k['name']==i]} for i in set([p['name'] for p in l])]

Вывод:

>>> print(res)

[{'name': 'brian', 'location': ['Brookings, OR', 'Medford, OR']}, {'name': 'tommy', 'location': ['Portland, OR', 'Medford, OR', 'Oklahoma City, OK']}]
person IoaTzimas    schedule 29.10.2020
comment
это неэффективный способ сделать это. Лучше использовать обычную идиому группировки - person juanpa.arrivillaga; 29.10.2020