Tengo un diccionario a continuación:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
¿Cómo indexo la primera entrada del diccionario?
colors[0]
devolverá un KeyError
por razones obvias.
Tengo un diccionario a continuación:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
¿Cómo indexo la primera entrada del diccionario?
colors[0]
devolverá un KeyError
por razones obvias.
Respuestas:
Los diccionarios están desordenados en las versiones de Python hasta Python 3.6 inclusive. Si no le importa el orden de las entradas y desea tener acceso a las claves o valores de índice de todos modos, puede utilizar d.keys()[i]
y d.values()[i]
o d.items()[i]
. (Tenga en cuenta que estos métodos crean una lista de todas las claves, valores o elementos en Python 2.x. Por lo tanto, si los necesita más de una vez, almacene la lista en una variable para mejorar el rendimiento).
Si le importa el orden de las entradas, puede comenzar con Python 2.7 collections.OrderedDict
. O usa una lista de pares
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
si no necesita acceso por clave. (Por cierto, ¿por qué sus números son cadenas?)
En Python 3.7, los diccionarios normales están ordenados, por lo que ya no necesita usarlos OrderedDict
(pero aún puede hacerlo, es básicamente del mismo tipo). La implementación CPython de Python 3.6 ya incluyó ese cambio, pero como no es parte de la especificación del lenguaje, no puede confiar en él en Python 3.6.
d.iterkeys().next()
lugar de d.keys()[0]
para inspeccionar una de las claves sin quitarla. Si el diccionario es enorme, hará una gran diferencia en términos de rendimiento. Lo mismo ocurre con los valores y los artículos. En Python 2.7 también puede usar objetos de vista dict
Si alguien todavía está mirando esta pregunta, la respuesta actualmente aceptada ahora está desactualizada:
Desde Python 3.7 *, los diccionarios mantienen el orden , es decir, ahora se comportan exactamente como collections.OrderedDict
solían hacerlo. Desafortunadamente, todavía no existe un método dedicado para indexar en keys()
/ values()
del diccionario, por lo que obtener la primera clave / valor en el diccionario se puede hacer como
first_key = list(colors)[0]
first_val = list(colors.values())[0]
o alternativamente (esto evita instanciar la vista de claves en una lista):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
Si necesita una n
-th clave, entonces de manera similar
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6 ya incluía dictados ordenados, pero esto era solo un detalle de implementación. La especificación del lenguaje incluye dictados ordenados desde 3.7 en adelante).
Abordar un elemento del diccionario es como sentarse en un burro y disfrutar del paseo.
Como regla de Python, el DICCIONARIO no tiene orden
Si hay
dic = {1: "a", 2: "aa", 3: "aaa"}
Ahora suponga que si voy como dic[10] = "b"
, entonces no se agregará así siempre
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
Puede ser como
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
O
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
O
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
O cualquier combinación de ese tipo.
Así que la regla general es DICCIONARIO es inodora !
Si necesita un diccionario ordenado, puede usar odict .
De hecho, encontré una solución novedosa que realmente me ayudó. Si está especialmente preocupado con el índice de un cierto valor en una lista o conjunto de datos, ¡puede simplemente establecer el valor del diccionario en ese Índice !:
Sólo mira:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
Ahora, a través del poder de los hashmaps, puede extraer el índice de sus entradas en tiempo constante (también conocido como mucho más rápido)
oh, eso es difícil. Lo que tienes aquí, básicamente, son dos valores para cada elemento. Entonces estás intentando llamarlos con un número como clave. Desafortunadamente, uno de sus valores ya está establecido como clave.
Prueba esto:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Ahora puede llamar a las teclas por número como si estuvieran indexadas como una lista. También puede hacer referencia al color y el número por su posición dentro de la lista.
Por ejemplo,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
Por supuesto, tendrá que encontrar otra forma de realizar un seguimiento de la ubicación en la que se encuentra cada color. Tal vez pueda tener otro diccionario que almacene la clave de cada color como su valor.
colors_key = {'azul': 1, 'rojo': 6, 'yllow': 8}
Luego, también podrá buscar la clave de colores si es necesario.
colors [colors_key ['blue']] [0] devolverá 'blue'
Algo como eso.
Y luego, mientras lo hace, puede hacer un diccionario con los valores numéricos como claves para que siempre pueda usarlos para buscar sus colores, ya sabe, si es necesario.
valores = {5: [1, 'azul'], 6: [2, 'rojo'], 8: [3, 'amarillo']}
Entonces, (colors [colors_key [valores [5] [1]]] [0]) devolverá 'azul'.
O puede utilizar una lista de listas.
¡Buena suerte!
No puedes, ya dict
que no está ordenado. puede usar .popitem()
para obtener un elemento arbitrario, pero eso lo eliminará del dict.