J'ai cherché une recette/exemple pour indexer une liste de tuples sans modifier l'approche de décorer, trier, sans décor.Y at-il un moyen en Python d'indexer une liste de conteneurs (tuples, listes, dictionnaires) par un élément d'un conteneur?
Par exemple:
l=[(a,b,c),(x,c,b),(z,c,b),(z,c,d),(a,d,d),(x,d,c) . . .]
L'approche que je l'ai utilisé est de construire un dictionnaire à l'aide defaultdict du second élément
from collections import defaultdict
tdict=defaultdict(int)
for myTuple in l:
tdict[myTuple[1]]+=1
Ensuite, je dois construire une liste constituée de la deuxième élément dans le tuple pour chaque élément de la liste. Bien qu'il existe plusieurs façons d'y arriver une approche simple consiste à:
tempList=[myTuple[1] for myTuple in l]
puis générer un index de chaque élément tdict
indexDict=defaultdict(dict)
for key in tdict:
indexDict[key]['index']=tempList.index(key)
Il est clair que cela ne semble pas très Pythonic. J'ai essayé de trouver des exemples ou des idées en pensant que je devrais être capable d'utiliser quelque chose de magique pour obtenir l'index directement. Pas de chance pour le moment. Notez, je comprends que je peux prendre mon approche un peu plus directement et ne pas générer tdict.
sortie pourrait être un dictionnaire avec l'index
indexDict={'b':{'index':0},'c':{'index':1},'d':{'index':4},. . .}
Après avoir appris beaucoup de réponses de Nadia Je pense que la réponse est non.
Pendant que sa réponse fonctionne, je pense que c'est plus compliqué que nécessaire. Je voudrais simplement
def build_index(someList):
indexDict={}
for item in enumerate(someList):
if item[1][1] not in indexDict:
indexDict[item[1][1]]=item[0]
return indexDict
Je suis confus sur ce que vous essayez de faire. Quelle est votre sortie désirée? Votre code ne fonctionne pas tout à fait - ce qui est censé être dans la ligne "tdict [myTuple [1]] + = count"? –
Pouvez-vous donner un exemple de la sortie ou de la structure attendue? –
Désolé - chaque fois que je crée un dictionnaire pour obtenir le compte d'un élément, j'écris toujours + = count avant de le corriger à + = 1. J'ai une cellule cérébrale. – PyNEwbie