J'ai un dictionnaire de tableaux.
myarr = [mydict['b'] for num in mydict['a'] num > 35]
Je veux extraire les éléments de mydict ['b'] quand mydict ['a' ] est supérieur à 35 . Je veux
myarr = ['red','blue','green']
J'ai essayé -
mydict={'a':[45,65,78,32], 'b':['red','blue','green','yellow'], 'c':[3.4, 4.5, 6.5, 7.6]}
Je ne veux pas suivre la voie C ++ / C d'énumération et de sauvegarde l'index et en utilisant l'index. Cela ne ressemble pas à Python.
Comment puis-je faire cela?
5 Réponses :
Vous pouvez utiliser enumerate pour accéder à l'index correspondant i à l'aide duquel vous pouvez obtenir la valeur correspondante à partir de mydict ['b'] .
myarr = [mydict['b'][i] for i, num in enumerate(mydict['a']) if num > 35] # ['red', 'blue', 'green']
Je ne veux pas suivre la voie C ++ / C d'énumération et de sauvegarde de l'index et d'utilisation de l'index.
vous êtes proche, vous devez utiliser zip :
[b for a, b in zip(mydict['a'], mydict['b']) if a > 35]
Essayez ceci:
[j for i,j in zip(mydict['a'],mydict['b']) if i>35]
Créez une nouvelle liste si la valeur de dict ['a']> 35 :
1 a 2 b 3 c 4 None 5 None
Python 3 .x :
Utilisation de itertools.zip_longest (* iterables, fillvalue = None) :
De docs :
Créez un itérateur qui regroupe les éléments de chacun des itérables. Si les itérables sont de longueur inégale, les valeurs manquantes sont remplies avec fillvalue. L'itération se poursuit jusqu'à ce que l'itération la plus longue soit épuisé
x = [1,2,3,4,5]
y = ['a','b','c']
for a,b in zip_longest(x,y):
print(a,b)
Python 2.x :
Utilisation de itertools.izip_longest (* iterables [ fillvalue])
1 a 2 b 3 c
Pourriez-vous également ajouter une note sur les différences entre zip et zip_longest ?
Si vous êtes prêt à utiliser pandas , ce type de filtrage est assez simple.
Commencez par passer mydict au constructeur DataFrame:
XXX
Utilisez maintenant un masque booléen pour filtrer les colonnes qui répondent à votre condition:
myarr = df[df['a']>35]['b'].values.tolist() print(myarr) #['red', 'blue', 'green']
Pour obtenir la sortie souhaitée sous forme de liste, vous pouvez faire:
print(df[df['a']>35]) # a b c #0 45 red 3.4 #1 65 blue 4.5 #2 78 green 6.5