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])
Meule
la source
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])
systempuntoout
la source
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
Escualo
la source
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))
Manoj Govindan
la source
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]
Sudhin
la source
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())

kurian
la source
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

Libert
la source
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')
Georg
la source
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])
splucène
la source
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)
siddharth
la source
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

s3icc0
la source
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'
Lallolu
la source
-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.

shojasadati mojtaba seyyed
la source