¿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])
Almiar
fuente
¿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])
systemmpuntoout
fuente
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
Escualo
fuente
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))
Manoj Govindan
fuente
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]
Sudhin
fuente
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())

kurian
fuente
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.

Libert
fuente
8

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

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')
Georg
fuente
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])
splucena
fuente
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)
Siddharth
fuente
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

s3icc0
fuente
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'
lallolu
fuente
-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.

seyyed mojtaba shojasadati
fuente