Как преобразовать список dict в dict. Ниже приведен список dict.
items = [{'name': 'shirt', 'color': 'pink'},
{'name': 'shirt', 'color': 'white'},
{'name': 'pants', 'color': 'beige'},
{'name': 'pants', 'color': 'black'},
{'name': 'hat', 'color': 'beige'}]
к
items_sorted = {'shirt': ['pink', 'white'],
'pants': ['beige', 'black'],
'hat': ['beige']
}
Я пытался:
items_sorted = {}
for item in items:
name = item.pop('name')
items_sorted[name] = item
Но вместо добавления дополнительного цвета он вернет элемент с самым обновленным цветом.
Предполагая, что вы хотите сохранить повторяющиеся значения:
items = [{'name': 'shirt', 'color': 'pink'},
{'name': 'shirt', 'color': 'white'},
{'name': 'pants', 'color': 'beige'},
{'name': 'pants', 'color': 'black'},
{'name': 'hat', 'color': 'beige'}]
sorted_items = {}
for dictionaty in items:
if not sorted_items.get(dictionaty['name']):
sorted_items[dictionaty['name']] = []
sorted_items[dictionaty['name']].append(dictionaty['color'])
В противном случае вместо этого используйте наборы:
sorted_items = {}
for dictionaty in items:
if not sorted_items.get(dictionaty['name']):
sorted_items[dictionaty['name']] = set()
sorted_items[dictionaty['name']].add(dictionaty['color'])
и если вы хотите, чтобы ключевые значения были списками, добавьте понимание словаря в конце, чтобы преобразовать наборы в списки:
sorted_items = {key: list(value) for key, value in sorted_items.items()}
Вы также можете использовать метод defaultdict
из встроенного модуля collections
при инициализации словаря sorted_items для простоты (вам не нужно беспокоиться о KeyErrors). Полный код:
from collections import defaultdict
items = [{'name': 'shirt', 'color': 'pink'},
{'name': 'shirt', 'color': 'white'},
{'name': 'pants', 'color': 'beige'},
{'name': 'pants', 'color': 'black'},
{'name': 'hat', 'color': 'beige'}]
sorted_items = defaultdict(set)
for dictionaty in items:
sorted_items[dictionaty['name']].add(dictionaty['color'])
sorted_items = {key: list(value) for key, value in sorted_items.items()}
if not sorted_items.get(dictionaty['name']):
-> if dictionaty['name'] not in sorted_items
По поводу понимания словаря: я думаю, что тег был добавлен по ошибке.
Не могли бы вы перефразировать свой вопрос? Фраза, которую он вернет, неясна, тогда как элемент с наиболее обновленным цветом, скорее всего, неверен.