2 votes

valeurs multiples dans un dictionnaire python

J'ai des données sous la forme suivante (sauvegardées dans une liste)

id, price, date, category

Je souhaite séparer les éléments en fonction de la catégorie En fait, il s'agit d'un dictionnaire dont la clé est la catégorie et le reste des éléments (identifiant, prix, données) sont ses valeurs. J'ai déjà créé une structure de données, de sorte qu'une structure de données "article" possède les quatre attributs susmentionnés (id, prix, date, catégorie). En fait, ce que je veux, c'est un dictionnaire de la forme suivante :

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

comment faire ? Comme il y a plusieurs valeurs dans une seule clé, je sais qu'il utilisera defaultdict mais je ne suis toujours pas en mesure de contourner ce problème. Merci de votre compréhension.

4voto

Shawn Chin Points 29756
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)

Exemple de sortie :

>>> 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')]}

4voto

Andrew Clark Points 77748

Je pense que vous voulez quelque chose comme ceci, en supposant que vos données actuelles soient stockées 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 .

2voto

Morten Kristensen Points 4071

Une façon de procéder serait d'avoir un dictionnaire où chaque valeur est une liste d'articles (identifiant, prix, date) et la clé est la catégorie.

Quelque chose comme ce qui suit, où d est un dictionnaire, c est une catégorie et itm est un tuple/élément :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X