Comment puis-je obtenir la clé du dictionnaire en tant que variable directement dans Python (pas en recherchant à partir de la valeur)?


190

Désolé pour cette question de base, mais mes recherches à ce sujet ne révèlent rien d'autre que la façon d'obtenir la clé d'un dictionnaire en fonction de sa valeur que je préférerais ne pas utiliser car je veux simplement le texte / nom de la clé et je crains que la recherche par valeur peut finir par renvoyer 2 clés ou plus si le dictionnaire a beaucoup d'entrées ... ce que j'essaye de faire est ceci:

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

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

La raison en est que je les imprime dans un document et que je souhaite utiliser le nom de la clé et la valeur pour ce faire

J'ai vu la méthode ci-dessous mais cela semble renvoyer simplement la valeur de la clé

get(key[, default])

Voulez-vous simplement vérifier que 'keyname' existe dans le dictionnaire? Parce que vous n'avez pas déjà.
sortie

1
non comme je l'ai dit, besoin de l'imprimer, ce serait une itération à travers un grand nombre de touches
Rick

currentest la clé actuelle, faites-leprint current
Moberg

4
Comment obtiendriez-vous la 1ère clé du dictionnaire? (sans itération)
VISQL

Réponses:


239

Vous devez parcourir les clés avec:

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

10
Vous pouvez juste écrirefor key in mydictionary:
blokeley

7
en python 3.6:print (f"key: {key}, value: {mydictionary[key]}")
JinSnow

94

Si vous souhaitez imprimer la clé et la valeur, utilisez ce qui suit:

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

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

82

La raison en est que je les imprime dans un document et que je souhaite utiliser le nom de la clé et la valeur pour ce faire

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

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

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

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

50

Si le dictionnaire contient une paire comme celle-ci:

d = {'age':24}

alors vous pouvez obtenir comme

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

Pour Python 3.5, procédez comme suit:

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

4
Python3.5:TypeError: 'dict_items' object does not support indexing
Sinux

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 de dicts:key = list(d.keys())[0]
Juha Untinen

Si vous avez un énorme dict, l'utilisation next()est meilleure selon: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

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


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

9

Aussi simple que cela:

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

Vous allez modifier votre dictionnaire et devez d'abord en faire une copie


8

Vous pouvez simplement utiliser *qui décompresse les clés du dictionnaire. Exemple:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')

python34: SyntaxError: peut utiliser l'expression étoilée uniquement comme cible d'affectation
Tcll

dang, j'utilise python34 car je ne peux rien exécuter de plus récent dans mon environnement de test Windows.
Tcll

5

Itérer sur le dictionnaire (i) renverra la clé, puis l'utilisera (i) pour obtenir la valeur

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

3

Pour python 3 Si vous souhaitez obtenir uniquement les clés, utilisez ceci. Remplacez print (clé) par print (valeurs) si vous voulez les valeurs.

for key,value in my_dict:
  print(key)

3

Ce que je fais parfois, c'est que je crée un autre dictionnaire juste pour pouvoir accéder à tout ce dont j'ai besoin sous forme de chaîne. Ensuite, j'itère plusieurs dictionnaires correspondant aux clés pour construire par exemple 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 correspondre une quantité énorme de dictionnaires aux données (j'aime le fait qu'avec un dictionnaire, vous pouvez toujours vous référer à quelque chose de bien connu sous le nom de clé)

oui j'utilise des dictionnaires pour stocker les résultats des fonctions, donc je n'ai pas besoin d'exécuter ces fonctions à chaque fois que je les appelle une seule fois, puis j'accède aux résultats à tout moment.

EDIT: dans mon exemple, le nom de la clé n'a pas vraiment d'importance (personnellement, j'aime utiliser les mêmes noms de clé car il est plus facile d'aller choisir une seule valeur dans l'un de mes dictionnaires correspondants), assurez-vous simplement que le nombre de clés dans chaque dictionnaire est le même


0

Vous pouvez le faire en convertissant les clés et les valeurs dict dans la liste. Cela peut également être fait pour les articles.

Exemple:

f = {'one': 'police', 'two': 'oranges', 'three': 'car'}
list(f.keys())[0] = 'one'
list(f.keys())[1] = 'two'

list(f.values())[0] = 'police'
list(f.values())[1] = 'oranges'

-2

changez facilement la position de vos clés et valeurs, puis utilisez des valeurs pour obtenir la clé, dans le dictionnaire, les clés peuvent avoir la même valeur mais elles (clés) doivent être différentes. par exemple, si vous avez une liste et que la première valeur de celle-ci est une clé pour votre problème et que les autres valeurs sont les spécifications de la première valeur:

list1=["Name",'ID=13736','Phone:1313','Dep:pyhton']

vous pouvez enregistrer et utiliser facilement les données dans le dictionnaire par cette boucle:

data_dict={}
for i in range(1, len(list1)):
     data_dict[list1[i]]=list1[0]
print(data_dict)
{'ID=13736': 'Name', 'Phone:1313': 'Name', 'Dep:pyhton': 'Name'}

alors vous pouvez trouver la base de clé (nom) sur n'importe quelle valeur d'entrée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.