Estoy tratando de acceder al elemento dict_key por su índice:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
Quiero llegar foo
.
lo mismo con:
keys[0]
TypeError: 'dict_keys' object does not support indexing
¿Cómo puedo hacer esto?
python
dictionary
python-3.x
key
fj123x
fuente
fuente
dict.keys()
devuelve un conjunto como objeto de vista, no lista (por lo tanto, la indexación no es posible). Usokeys = list(test)
collections.OrderedDict
si desea claves ordenadas)Respuestas:
Llame
list()
al diccionario en su lugar:En Python 3, el
dict.keys()
método devuelve un objeto de vista de diccionario , que actúa como un conjunto. Iterar sobre el diccionario directamente también produce claves, por lo que convertir un diccionario en una lista da como resultado una lista de todas las claves:fuente
dict
subclase, por ejemplo, donde.keys()
se maneja en código Python (por ejemplo, puede tener lugar un cambio de hilo).sorted(dict)
haría exactamente lo mismo; producir una lista de claves en orden ordenado.list(dict)
le dará la lista en orden de diccionario.keys = [*test]
No es una respuesta completa, pero quizás una pista útil. Si realmente es el primer elemento que desea *, entonces
es mucho más rápido que
para dictos grandes, ya que todo no tiene que almacenarse en la memoria.
Por 10,000,000 artículos encontré que es casi 40,000 veces más rápido.
* El primer elemento en caso de que un dict sea solo un elemento pseudoaleatorio antes de Python 3.6 (después de eso se ordena en la implementación estándar, aunque no se recomienda confiar en él).
fuente
Quería el par "clave" y "valor" de un primer elemento del diccionario. Use el siguiente código.
fuente
Manera convencional de agregar las claves a una lista estáticamente definida y luego indexarla por la misma
fuente
ls = list(test.keys())
? Lo encuentro más simple.En muchos casos, esto puede ser un problema XY . ¿Por qué indexa las teclas de su diccionario por posición? ¿Realmente lo necesitas? Hasta hace poco, los diccionarios ni siquiera se ordenaban en Python, por lo que acceder al primer elemento era arbitrario.
Acabo de traducir un código de Python 2 a Python 3:
lo cual no es bonito, pero tampoco está muy mal. Al principio, estaba a punto de reemplazarlo por lo monstruoso
antes de darme cuenta de que todo esto está mucho mejor escrito como
que funciona bien
Creo que en muchos otros casos, se puede evitar indexar las claves del diccionario por posición. Aunque los diccionarios están ordenados en Python 3.7, confiar en eso no es bonito. El código anterior solo funciona porque el contenido de
some_list
ha sido producido recientemente a partir del contenido ded
.Observe detenidamente su código si realmente necesita acceder a un
disk_keys
elemento por índice. Quizás no necesites hacerlo.fuente
Prueba esto
El resultado se ve así. ['foo', 'hola']
Puede encontrar más soluciones posibles aquí .
fuente