несколько значений в словаре Python - PullRequest
2 голосов
/ 27 октября 2011

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

id, price, date, category

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

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

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

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

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

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

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

4 голосов
/ 27 октября 2011
output = defaultdict(list)
for item, cat in ((x[:-1], x[-1]) for x in data):
    output[cat].append(item)

или без указания по умолчанию:

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')]}
2 голосов
/ 27 октября 2011

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

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

def insert(d, c, itm):
  if not c in d:
    d[c] = [itm]
  else:
    d[c].append(itm)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...