¿Cómo puedo obtener la clave del diccionario como variable directamente en Python (no buscando desde el valor)?


190

Perdón por esta pregunta básica, pero mis búsquedas en esto no están obteniendo otra cosa que no sea cómo obtener la clave de un diccionario en función de su valor, que preferiría no usar, ya que simplemente quiero el texto / nombre de la clave y me preocupa que la búsqueda por valor puede terminar devolviendo 2 o más claves si el diccionario tiene muchas entradas ... lo que estoy tratando de hacer es esto:

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

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

La razón de esto es que los estoy imprimiendo en un documento y quiero usar el nombre de la clave y el valor para hacerlo.

He visto el siguiente método, pero parece que solo devuelve el valor de la clave

get(key[, default])

¿Solo quieres comprobar que existe 'keyname' en el diccionario? Porque ya lo tienes.
relet

1
no, como dije, necesito imprimirlo, estaría iterando a través de una gran cantidad de teclas
Rick

currentes la clave actual, solo hazloprint current
Moberg

44
¿Cómo obtendrías solo la primera clave del diccionario? (sin iteración)
VISQL

Respuestas:


239

Debe iterar sobre las teclas con:

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

10
Puedes escribirfor key in mydictionary:
blokeley

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

94

Si desea imprimir clave y valor, use lo siguiente:

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

26
Para Python 3: items () en lugar de iteritems ()
toshiro92

82

La razón de esto es que los estoy imprimiendo en un documento y quiero usar el nombre de la clave y el valor para hacerlo.

Según el requisito anterior, esto es lo que sugeriría:

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

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

Prefiero las otras respuestas como el bucle for my_dict.item()o la comprensión de listas, keys = list(my_dict.keys)pero en caso de que alguien quiera hacer esto en Python 3: (línea 2) keys = sorted(my_dict.keys())+ add () para imprimir.
Honiix

50

Si el diccionario contiene un par como este:

d = {'age':24}

entonces puedes obtener

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

Para Python 3.5, haga esto:

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

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

Bastante hack pero d .__ iter __ () .__ next __ () hace el truco. tienes "edad". Obtiene el mismo resultado con este d.items () .__ iter __ () .__ next __ () [0].
yoshi

2
En Python3, esto funciona para un par de dictados:key = list(d.keys())[0]
Juha Untinen

Si tiene un dict enorme, el uso next()es mejor de acuerdo con: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

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


Asegúrese de usar etiquetas de código y explique su respuesta también.
Chrismas007

9

Tan sencillo como eso:

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

Modificará su diccionario y primero debe hacer una copia.


8

Simplemente podría usar el *que desempaqueta las teclas del diccionario. Ejemplo:

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

python34: SyntaxError: puede usar expresiones destacadas solo como destino de asignación
Tcll

Dang, uso python34 porque no puedo ejecutar nada más nuevo en mi entorno de prueba de Windows.
Tcll

5

Iterar sobre el diccionario (i) devolverá la clave y luego usarla (i) para obtener el valor

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

3

Para python 3 Si desea obtener solo las claves, use esto. Reemplace print (clave) con print (valores) si desea los valores.

for key,value in my_dict:
  print(key)

3

Lo que a veces hago es crear otro diccionario solo para poder acceder a lo que siento que necesito como cadena. Luego itero sobre múltiples diccionarios que coinciden con claves para construir, por ejemplo, una tabla con la primera columna como descripción.

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])

Puede hacerlo fácilmente para que una gran cantidad de diccionarios coincidan con los datos (me gusta el hecho de que con el diccionario siempre puede referirse a algo conocido como el nombre clave)

Sí, uso diccionarios para almacenar resultados de funciones, por lo que no necesito ejecutar estas funciones cada vez que las llamo solo una vez y luego accedo a los resultados en cualquier momento.

EDITAR: en mi ejemplo, el nombre de la clave realmente no importa (personalmente me gusta usar los mismos nombres de clave, ya que es más fácil elegir un solo valor de cualquiera de mis diccionarios coincidentes), solo asegúrese de que el número de claves en cada diccionario sea lo mismo


0

Puede hacer esto enviando las claves y valores dict a la lista. También se puede hacer para artículos.

Ejemplo:

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

cambie fácilmente la posición de sus claves y valores, luego use los valores para obtener la clave, en el diccionario las claves pueden tener el mismo valor pero ellas (las claves) deben ser diferentes. por ejemplo, si tiene una lista y el primer valor de la misma es clave para su problema y otros valores son las especificaciones del primer valor:

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

Puede guardar y usar los datos fácilmente en el diccionario mediante este bucle:

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'}

entonces puede encontrar la base de la clave (nombre) en cualquier valor de entrada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.