2010-08-23 17 views
135

Désolé pour cette question de base, mais mes recherches sur ce ne sont rien d'autre que la façon d'obtenir une clé de dictionnaire basée sur sa valeur que je préférerais ne pas utiliser car je veux simplement le texte/nom de la clé et je suis inquiet que la recherche en valeur peut finir par revenir 2 ou plusieurs clés si le dictionnaire a beaucoup d'entrées ... ce que je suis en train de faire est la suivante:Comment puis-je obtenir la clé de dictionnaire comme variable directement en Python (pas en cherchant à partir de la valeur)?

mydictionary={'keyname':'somevalue'} 
for current in mydictionary: 

    result = mydictionary.(some_function_to_get_key_name)[current] 
    print result 
    "keyname" 

la raison est que je suis l'impression de ces out à un document et je veux utiliser le nom de la clé et la valeur en faisant cela

J'ai vu la méthode ci-dessous, mais cela semble juste retourner la valeur de la clé

get(key[, default]) 
+0

Voulez-vous juste vérifier que «keyname» existe dans le dictionnaire? Parce que vous * l'avez * déjà. – relet

+1

non comme je l'ai dit, besoin de l'imprimer, il serait itératif à travers un grand nombre de clés – Rick

+0

'current' est la clé actuelle, juste faire' current current – Moberg

Répondre

182

Vous devriez itérer clés avec:

for key in mydictionary: 
    print "key: %s , value: %s" % (key, mydictionary[key]) 
+6

Vous pouvez écrire 'pour clé dans mydictionary:' – blokeley

+3

dans python 3.6: 'print (f" touche: {clé}, valeur: {mydictionary [clé]} ")' – JinSnow

72

Si vous souhaitez imprimer clé et la valeur, utilisez les touches suivantes:

for key, value in my_dict.iteritems(): 
    print key, value 
+3

Pour Python 3: items () au lieu de iteritems() – toshiro92

66

The reason for this is that I am printing these out to a document and I want to use the key name and the value in doing this

Sur la base de l'exigence Au-dessus, ce que je suggérerais:

keys = mydictionary.keys() 
keys.sort() 

for each in keys: 
    print "%s: %s" % (each, mydictionary.get(each)) 
+0

Je préfère les autres réponses comme la boucle for sur 'my_dict.item()' ou la compréhension de la liste comme 'keys = list (my_dict.keys)' mais juste au cas où quelqu'un voudrait le faire en Python 3 : (ligne 2) 'keys = trié (my_dict.keys())' + add() pour imprimer. – Honiix

8

keys=[i for i in mydictionary.keys()] ou keys = list(mydictionary.keys())

+0

Veuillez vous assurer d'utiliser des étiquettes de code et d'expliquer votre réponse. – Chrismas007

5

itérer sur le dictionnaire (i) retourne la clé, puis l'utiliser (i) pour obtenir la valeur

for i in D: 
    print "key: %s, value: %s" % (i, D[i]) 
20

Si le dictionnaire contient une paire comme ceci:

d = {'age':24} 

alors vous pouvez obtenir

field, value = d.items()[0] 

Pour Python 3.5, faites ceci:

key = list(d.keys())[0] 
+4

Python3.5: 'TypeError: l'objet 'dict_items' ne supporte pas l'indexation – Sinux

+0

Assez hackish mais d .__ iter __() .__ next __() fait l'affaire. vous obtenez l'âge. Vous obtenez le même résultat avec ce d.items() .__ iter __() .__ next __() [0]. – yoshi

+2

En Python3, cela fonctionne pour une paire dicts: 'key = list (d.keys()) [0]' –

3

Pour python 3 Si vous souhaitez obtenir uniquement les touches utiliser. Remplacez print (key) par print (valeurs) si vous voulez les valeurs.

for key,value in my_dict: 
    print(key) 
6

Aussi simple que cela:

mydictionary={'keyname':'somevalue'} 
result = mydictionary.popitem()[0] 

Vous aurez votre dictionnaire et devrait faire une copie

3

Ce que je fais parfois est que je crée un autre dictionnaire juste pour être en mesure tout ce que je ressens Je dois accéder en tant que chaîne. Ensuite, je itère sur plusieurs dictionnaires correspondant à des clés pour construire par ex. une table avec la première colonne comme description.

dict_names = {'key1': 'Text 1', 'key2': 'Text 2'} 
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items(): 
    print('{0} {1}'.format(dict_names[key], dict_values[key]) 

Vous pouvez facilement faire pour une énorme quantité de dictionnaires pour correspondre à des données (j'aime le fait que, avec le dictionnaire, vous pouvez toujours se référer à quelque chose bien connu sous le nom de la clé)

oui j'utiliser dictionnaires stocker les résultats des fonctions de sorte que je n'ai pas besoin d'exécuter ces fonctions chaque fois que je les appelle juste une seule fois et ensuite accéder aux résultats à tout moment.

EDIT: dans mon exemple, le nom de la clé n'a pas vraiment d'importance (j'aime personnellement utiliser les mêmes noms de touches car il est plus facile de choisir une seule valeur parmi mes dictionnaires correspondants) dans chaque dictionnaire est le même