web-dev-qa-db-fra.com

Comment imprimer la clé d'un dictionnaire?

Je souhaite imprimer une clé de dictionnaire Python spécifique:

mydic = {}
mydic['key_name'] = 'value_name'

Maintenant, je peux vérifier si mydic.has_key('key_name'), mais ce que je voudrais faire est d’imprimer le nom de la touche 'key_name'. Bien sûr, je pourrais utiliser mydic.items(), mais je ne veux pas toutes les clés listées, simplement une clé spécifique. Par exemple, j'attendrais quelque chose comme ceci (en pseudo-code):

print "the key name is", mydic['key_name'].name_the_key(), "and its value is", mydic['key_name']

Existe-t-il une méthode name_the_key() pour imprimer un nom de clé?


Edit: OK, merci beaucoup pour vos réactions! :) Je me rends compte que ma question n'est pas bien formulée et triviale. Je viens de me perdre parce que j'ai réalisé key_name et mydic['key_name'] sont deux choses différentes et j'ai pensé qu'il serait incorrect d'imprimer le key_name hors du contexte du dictionnaire. Mais en effet, je peux simplement utiliser le 'nom_clé' pour faire référence à la clé! :)

183
Benjamin

Un dictionnaire a, par définition, un nombre arbitraire de clés. Il n'y a pas "la clé". Vous avez la méthode keys(), qui vous donne un python list de toutes les clés, et la méthode iteritems(), qui renvoie les paires clé-valeur, afin

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

Version Python 3:

for key, value in mydic.items() :
    print (key, value)

Donc, vous avez une poignée sur les touches, mais elles ne sont réellement significatives que si elles sont associées à une valeur. J'espère avoir compris votre question.

327
juanchopanza

De plus, vous pouvez utiliser ....

print(dictionary.items()) #prints keys and values
print(dictionary.keys()) #prints keys
print(dictionary.values()) #prints values
44
Mason

Hmm, je pense que ce que vous voudrez peut-être faire, c'est imprimer tous les clés du dictionnaire et leurs valeurs respectives?

Si oui, vous voulez ce qui suit:

for key in mydic:
  print "the key name is" + key + "and its value is" + mydic[key]

Assurez-vous que vous utilisez des + au lieu de, également. La virgule mettra chacun de ces éléments sur une ligne distincte je pense, où plus les placera sur la même ligne.

31
Dominic Santos
dic = {"key 1":"value 1","key b":"value b"}

#print the keys:
for key in dic:
    print key

#print the values:
for value in dic.itervalues():
    print value

#print key and values
for key, value in dic.iteritems():
    print key, value

Remarque: dans Python 3, dic.iteritems () a été renommé en dic.items ()

29
ademar111190

Le nom de la clé 'nom_clé' est nom_clé, donc print 'key_name' ou la variable que vous représentez.

25
zenna

Puisque nous essayons tous de deviner ce que "imprimer un nom de clé" pourrait signifier, je vais tenter le coup. Vous voulez peut-être une fonction qui tire une valeur du dictionnaire et trouve la clé correspondante? Une recherche inversée?

def key_for_value(d, value):
    """Return a key in `d` having a value of `value`."""
    for k, v in d.iteritems():
        if v == value:
            return k

Notez que beaucoup de clés peuvent avoir la même valeur, cette fonction retournera donc certaines clés ayant la valeur, peut-être pas celle que vous vouliez.

Si vous devez le faire fréquemment, il serait logique de construire le dictionnaire inverse:

d_rev = dict(v,k for k,v in d.iteritems())
8
Ned Batchelder

Ou vous pouvez le faire de cette manière:

for key in my_dict:
     print key, my_dict[key]
4
Eugene Soldatov

Dans Python 3:

# A simple dictionary
x = {'X':"yes", 'Y':"no", 'Z':"ok"}

# To print a specific key (for example key at index 1)
print([key for key in x.keys()][1])

# To print a specific value (for example value at index 1)
print([value for value in x.values()][1])

# To print a pair of a key with its value (for example pair at index 2)
print(([key for key in x.keys()][2], [value for value in x.values()][2]))

# To print a key and a different value (for example key at index 0 and value at index 1)
print(([key for key in x.keys()][0], [value for value in x.values()][1]))

# To print all keys and values concatenated together
print(''.join(str(key) + '' + str(value) for key, value in x.items()))

# To print all keys and values separated by commas
print(', '.join(str(key) + ', ' + str(value) for key, value in x.items()))

# To print all pairs of (key, value) one at a time
for e in range(len(x)):
    print(([key for key in x.keys()][e], [value for value in x.values()][e]))

# To print all pairs (key, value) in a Tuple
print(Tuple(([key for key in x.keys()][i], [value for value in x.values()][i]) for i in range(len(x))))
4
FouadDev
# highlighting how to use a named variable within a string:
mapping = {'a': 1, 'b': 2}

# simple method:
print(f'a: {mapping["a"]}')
print(f'b: {mapping["b"]}')

# programmatic method:
for key, value in mapping.items():
    print(f'{key}: {value}')

# yields:
# a 1
# b 2

# using list comprehension
print('\n'.join(f'{key}: {value}' for key, value in dict.items()))


# yields:
# a: 1
# b: 2

Edit: mis à jour pour python les chaînes de caractères 3 de ...

3
Brian Bruggeman
import pprint
pprint.pprint(mydic.keys())
2
Matt Joiner

Qu'est-ce qui ne va pas avec 'key_name' à la place, même s'il s'agit d'une variable?

2
Ry-

Assurez-vous de faire

dictionary.keys()
# rather than
dictionary.keys
2
Crt
dict = {'name' : 'Fred', 'age' : 100, 'employed' : True }

# Choose key to print (could be a user input)
x = 'name'

if x in dict.keys():
    print(x)
1
Rob Wilson

Probablement le moyen le plus rapide de récupérer uniquement le nom de la clé:

mydic = {}
mydic['key_name'] = 'value_name'

print mydic.items()[0][0]

Résultat:

key_name

Convertit la dictionary en list puis il répertorie le premier élément qui est l'ensemble dict, puis la première valeur de cet élément qui est: key_name

1
Fekete Sumér

J'ai cherché cette question parce que je voulais savoir comment récupérer le nom de "la clé" si mon dictionnaire n'avait qu'une entrée. Dans mon cas, la clé m’était inconnue et pouvait être un nombre quelconque de choses. Voici ce que je suis venu avec:

dict1 = {'random_Word': [1,2,3]}
key_name = str([key for key in dict1]).strip("'[]'")        
print(key_name)  # equal to 'random_Word', type: string.
0
PeaWagon

Essaye ça:

def name_the_key(dict, key):
    return key, dict[key]

mydict = {'key1':1, 'key2':2, 'key3':3}

key_name, value = name_the_key(mydict, 'key2')
print 'KEY NAME: %s' % key_name
print 'KEY VALUE: %s' % value
0
fdb

Si vous souhaitez obtenir la clé d'une seule valeur, voici ce qui vous aidera:

def get_key(b): # the value is passed to the function
    for k, v in mydic.items():
        if v.lower() == b.lower():
            return k

En manière pythonique:

c = next((x for x, y in mydic.items() if y.lower() == b.lower()), \
     "Enter a valid 'Value'")
print(c)
0
Jeril

J'ajoute cette réponse comme l'une des autres réponses ici ( https://stackoverflow.com/a/5905752/190494 ) est daté (Python 2; iteritems), et le Le code présenté - s'il est mis à jour pour Python 3 conformément à la solution de contournement suggérée dans un commentaire sur cette réponse - ne renvoie pas en mode silencieux toutes les données pertinentes.


Arrière-plan

J'ai des données métaboliques, représentées dans un graphique (nœuds, arêtes, ...). Dans une représentation au dictionnaire de ces données, les clés sont de la forme (604, 1037, 0) (représentant les nœuds source et cible et le type de bord), avec valeurs de la forme 5.3.1.9 (représentant les codes d'enzyme EC).

Rechercher des clés pour des valeurs données

Le code suivant trouve correctement mes clés, valeurs données:

def k4v_edited(my_dict, value):
    values_list = []
    for k, v in my_dict.items():
        if v == value:
            values_list.append(k)
    return values_list

print(k4v_edited(Edge_attributes, '5.3.1.9'))
## [(604, 1037, 0), (604, 3936, 0), (1037, 3936, 0)]

alors que ce code ne retourne que la première (de éventuellement plusieurs clés correspondantes):

def k4v(my_dict, value):
    for k, v in my_dict.items():
        if v == value:
            return k

print(k4v(Edge_attributes, '5.3.1.9'))
## (604, 1037, 0)

Ce dernier code, mis à jour naïvement en remplaçant iteritems par items, ne renvoie pas (604, 3936, 0), (1037, 3936, 0.

0
Victoria Stuart
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])
0
Dona