Si a mydict
no está vacío, accedo a un elemento arbitrario como:
mydict[mydict.keys()[0]]
¿Hay alguna forma mejor de hacer esto?
python
dictionary
Stan
fuente
fuente
list(mydict.keys())[0]
.Respuestas:
En Python 3, de forma no destructiva e iterativa:
En Python 2, de forma no destructiva e iterativa:
Si desea que funcione tanto en Python 2 como en 3, puede usar el
six
paquete:aunque en este punto es bastante críptico y prefiero tu código.
Si desea eliminar algún elemento, haga lo siguiente:
Tenga en cuenta que "primero" puede no ser un término apropiado aquí porque
dict
no es un tipo ordenado en Python <3.6. Python 3.6+dicts
están ordenados.fuente
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Si solo necesita acceder a un elemento (siendo el primero por casualidad, ya que los dictados no garantizan el pedido), simplemente puede hacer esto en Python 2 :
Tenga en cuenta que (a mi leal saber y entender) Python no garantiza que 2 llamadas sucesivas a cualquiera de estos métodos devuelvan la lista con el mismo orden. Esto no es compatible con Python3.
en Python 3 :
fuente
list(my_dict.keys())[0]
list(my_dict.keys())[0]
no es vago?En python3, El camino:
devuelve un valor en tipo: dict_keys (), obtendremos un error cuando obtengamos el primer miembro de las claves de dict de esta manera:
Finalmente, convierto dict.keys () a list @ 1st, y obtuve el primer miembro por el método de empalme de lista:
fuente
list(dict.values())[0]
.obtener una llave
para obtener un valor
para obtener ambos
Los dos primeros son Python 2 y 3. Los dos últimos son vagos en Python 3, pero no en Python 2.
fuente
Como otros mencionaron, no hay un "primer elemento", ya que los diccionarios no tienen un orden garantizado (se implementan como tablas hash). Si desea, por ejemplo, el valor correspondiente a la clave más pequeña,
thedict[min(thedict)]
lo hará. Si le importa el orden en que se insertaron las claves, es decir, por "primero" quiere decir "insertado más temprano", entonces en Python 3.1 puede usar collections.OrderedDict , que también se encuentra en Python 2.7; para versiones anteriores de Python, descargue, instale y use el backport dict ordenado (2.4 y posterior) que puede encontrar aquí .Python 3.7 Ahora los dictados están ordenados por inserción.
fuente
Qué tal esto. No se menciona aquí todavía.
py 2 y 3
fuente
dict.values()
devuelve una vista, por lo que debería ser O (1).list(a)
devuelve una nueva lista, por lo que sería O (n).Ignorando los problemas relacionados con el pedido de dict, esto podría ser mejor:
De esta forma, evitamos la búsqueda de elementos y generamos una lista de claves que no usamos.
Python3
fuente
next(iter(dict.values()))
obtener el mismo resultado sin crear la lista.En python3
fuente
Siempre puedes hacer:
Esto le dará una forma consistente ordenados (con respecto al orden interna conjunto .hash () supongo) de teclas que puede procesar en la clasificación si tiene algún significado para ti. Eso significa, por ejemplo, que los tipos numéricos se ordenan de manera consistente incluso si expande el diccionario.
EJEMPLO
Tenga en cuenta que el diccionario se ordena cuando se imprime. ¡Pero el conjunto de claves es esencialmente un hashmap!
fuente
Para Python 2 y 3:
fuente
Is there any better way to do this?
de manera breve.fuente
Sin bibliotecas externas, funciona tanto en Python 2.7 como en 3.x:
Para la clave aribtrary simplemente omita .values ()
fuente
La subclasificación
dict
es un método, aunque no eficiente. Aquí, si proporciona un número entero, volverád[list(d)[n]]
; de lo contrario, acceda al diccionario como se esperaba:fuente