несколько значений в словаре python

#python #dictionary

#python #словарь

Вопрос:

У меня есть данные в следующей форме (сохраненные в списке)

 id, price, date, category
  

Теперь я в основном хочу разделить элементы на основе категории..
в основном словарь, где ключ — это категория, а остальные данные (id, цена, данные) — это его значения
Я уже создал структуру данных, поэтому позволяет элементу структуры данных иметь указанные выше четыре атрибута (идентификатор, цена, дата, категория)
Итак, в основном я хочу, чтобы словарь был в следующей форме:

 {1: [item_1,item_2....], 2:[item....]} 
  

как мне это сделать..
Поскольку в одном ключе много значений, следовательно, я знаю, что он будет использовать defaultdict .. но все же я не могу обойти это.
Спасибо

Комментарии:

1. Я не совсем понимаю вашу проблему. почему python dict не работает для вас?

Ответ №1:

Я думаю, вам нужно что-то подобное, предполагая, что ваши текущие данные хранятся в списке list_data :

 dict_data = defaultdict(list)
for item in list_data:
    dict_data[item.category].append(item)
  

Если каждый элемент является кортежем, а не объектом, используйте item[3] вместо item.category .

Ответ №2:

 output = defaultdict(list)
for item, cat in ((x[:-1], x[-1]) for x in data):
    output[cat].append(item)
  

или, без defaultdict:

 output = {}
for item, cat in ((x[:-1], x[-1]) for x in data):
    output.setdefault(cat, []).append(item)
  

Пример вывода:

 >>> data = [
...     (1, 123, "somedate", "boy"),
...     (3, 435, "anotherdate", "boy"),
...     (23, 123, "moredate", "girl"),
... ]
>>> output = {}
>>> for item, cat in ((x[:-1], x[-1]) for x in data):
...     output.setdefault(cat, []).append(item)
... 
>>> print output
{'boy': [(1, 123, 'somedate'), (3, 435, 'anotherdate')], 'girl': [(23, 123, 'moredate')]}
  

Ответ №3:

Одним из способов сделать это было бы иметь словарь, где каждое значение представляет собой список элементов (идентификатор, цена, дата), а ключ — категория.

Что-то вроде следующего, где d является словарем, c является категорией и itm является кортежем / элементом:

 def insert(d, c, itm):
  if not c in d:
    d[c] = [itm]
  else:
    d[c].append(itm)