2011-10-27 3 views
2

dictionnaire I contiennent des données sous forme suivante (enregistrée dans une liste)valeurs multiples dans un python

id, price, date, category 

Maintenant, je veux essentiellement de séparer les éléments en fonction de la catégorie .. essentiellement un dictionnaire où la clé est la catégorie et le reste de la substance (id, prix, données) sont ses valeurs J'ai déjà créé une structure de données donc laissez un datastructre 'article' a les quatre attributs ci-dessus (id, prix, date, catégorie) Donc, fondamentalement, ce que je vouloir est un dictionnaire sous la forme suivante:

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

comment puis-je faire cela .. Puisqu'il y a beaucoup de valeurs dans une seule clé donc je sais qu'il utilisera defaultdict .. mais encore je ne suis pas capable de contourner cela. Merci

+0

Je ne comprends pas parfaitement votre problème. pourquoi le python dict ne fonctionne pas pour vous? – llazzaro

Répondre

4

Je pense que vous voulez quelque chose comme cela, en supposant que vos données en cours est stocké dans la liste list_data:

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

Si chaque élément est un tuple au lieu d'un objet, utilisez item[3] au lieu de item.category.

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

ou, sans defaultdict:

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

sortie Exemple:

>>> 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

Une façon de le faire serait d'avoir un dictionnaire où chaque valeur est une liste d'éléments (id, prix, date) et la clé est la catégorie.

Quelque chose le long des lignes de ce qui suit, où d est un dictionnaire, c est une catégorie et itm est un tuple/article:

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