Si je voudrais parcourir les valeurs de dictionnaire stockées dans un tuple.
j'ai besoin de retourner l'objet qui contient la valeur "CI", je suppose que j'aurai besoin d'une sorte de boucle for:
z = {'x':(123,SE,2,1),'z':(124,CI,1,1)}
for i, k in db.z:
for k in db.z[i]:
if k == 'CI':
return db.z[k]
il me manque probablement quelque chose ici, un point de référence serait bon.
s'il y a un moyen plus rapide de le faire, tout cela aiderait grandement
z = {'x':(123,"SE",2,1),'q':(124,"CI",1,1)}
for i in z.keys(): #reaching the keys of dict
for x in z[i]: #reaching every element in tuples
if x=="CI": #if match found..
print ("{} holding {}.".format(i,x)) #printing it..
Cela pourrait résoudre votre problème.
Sortie:
>>>
q holding CI.
>>>
Modifier pour votre commentaire:
def func(*args):
mylist=[]
z = {'x':(123,"SE",2,1),'q':(124,"CI",1,1)}
for x,y in z.items():
for t in args:
if t in y:
mylist.append(x)
return mylist
print (func(1,"CI"))
Sortie:
>>>
['q', 'q', 'x']
>>>
J'espère que c'est ce que vous voulez, sinon la première méthode imprime déjà toutes les clés, exemple de sortie:
if x==1 or x=="CI":
>>>
x holding 1.
q holding CI.
q holding 1.
q holding 1.
>>>
Tout d'abord, il existe plusieurs façons de parcourir un dictionnaire.
Boucle directement sur le dictionnaire:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> for key in z:
... print key,
...
'x' 'z'
Notez que les variables de boucle qui sont renvoyées lorsque vous bouclez simplement sur un dictionnaire sont les clés, pas les valeurs associées à ces clés.
Faire une boucle sur les valeurs d'un dictionnaire:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> for value in z.values(): # Alternatively itervalues() for memory-efficiency (but ugly)
... print value,
...
(123,'SE',2,1) (124,'CI',1,1)
En boucle sur les clés et les valeurs:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> for key, value in z.items(): # Again, iteritems() for memory-efficiency
... print key, value,
...
'x' (123,'SE',2,1) 'z' (124,'CI',1,1)
Les deux derniers sont un peu plus efficaces que de boucler sur des clés et d'exécuter z [clé] pour obtenir la valeur. C'est aussi sans doute plus lisible.
S'appuyant sur ces ...
Comprendre la liste sont excellents. Pour le cas simple de recherche de "CI" uniquement:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> [key for key, value in z.items() if 'CI' in value]
['z']
Pour rechercher des clés dict contenant plusieurs éléments de recherche:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> search_items = ('CI', 1) # Only keys that hold both CI and 1 will match
>>> [key for key, value in z.items() if all(item in value for item in search_items)]
['z']
Pour rechercher des clés dict qui contiennent plusieurs éléments de recherche:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> search_items = ('CI', 'SE', 'JP') # Keys that hold any of the three items will match
>>> [key for key, value in z.items() if any(item in value for item in search_items)]
['x', 'z']
Si les deux derniers semblent un peu trop complexes en tant que lignes simples, vous pouvez réécrire le dernier bit en tant que fonction distincte.
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> search_items = ('CI', 'SE', 'JP') # Keys that hold any of the three items will match
>>> def match_any(dict_value, search_items):
... return any(item in dict_value for item in search_items)
...
>>> [key for key, value in z.items() if match_any(value, search_items)]
['x', 'z']
Une fois que vous vous êtes habitué à la syntaxe [x for x in iterable if condition (x)], le format devrait être très facile à lire et à suivre.
essaye ça:
>>> z = {'x':(123,'SE',2,1),'z':(124,'CI',1,1)}
>>> list(filter(lambda x:'CI' in z.get(x),z))
['z']
z = {'x':(123,"SE",2,1),'q':(124,"CI",1,1)}
for key, val in z.items():
if 'CI' in val:
return z[key]
Il n'est pas nécessaire de récupérer la clé si vous êtes uniquement intéressé par les valeurs:
Dans Python 2.x:
z = {'x':(123,"SE",2,1),'q':(124,"CI",1,1)}
for value in z.itervalues():
if 'CI' in value:
return value
Dans Python 3.x:
z = {'x':(123,"SE",2,1),'q':(124,"CI",1,1)}
for value in z.values():
if 'CI' in value:
return value