Si a mydict
no está vacío, accedo a un elemento arbitrario como:
mydict[mydict.keys()[0]]
¿Hay alguna forma mejor de hacer esto?
list(mydict.keys())[0]
.
Si a mydict
no está vacío, accedo a un elemento arbitrario como:
mydict[mydict.keys()[0]]
¿Hay alguna forma mejor de hacer esto?
list(mydict.keys())[0]
.
Respuestas:
En Python 3, de forma no destructiva e iterativa:
next(iter(mydict.values()))
En Python 2, de forma no destructiva e iterativa:
mydict.itervalues().next()
Si desea que funcione tanto en Python 2 como en 3, puede usar el six
paquete:
six.next(six.itervalues(mydict))
aunque en este punto es bastante críptico y prefiero tu código.
Si desea eliminar algún elemento, haga lo siguiente:
key, value = mydict.popitem()
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.
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 :
my_dict.keys()[0] -> key of "first" element
my_dict.values()[0] -> value of "first" element
my_dict.items()[0] -> (key, value) tuple of "first" element
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 :
list(my_dict.keys())[0] -> key of "first" element
list(my_dict.values())[0] -> value of "first" element
list(my_dict.items())[0] -> (key, value) tuple of "first" element
list(my_dict.keys())[0]
list(my_dict.keys())[0]
no es vago?
En python3, El camino:
dict.keys()
devuelve un valor en tipo: dict_keys (), obtendremos un error cuando obtengamos el primer miembro de las claves de dict de esta manera:
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
Finalmente, convierto dict.keys () a list @ 1st, y obtuve el primer miembro por el método de empalme de lista:
list(dict.keys())[0]
list(dict.values())[0]
.
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.
Qué tal esto. No se menciona aquí todavía.
py 2 y 3
a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
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:
next(dict.itervalues())
De esta forma, evitamos la búsqueda de elementos y generamos una lista de claves que no usamos.
next(iter(dict.values()))
next(iter(dict.values()))
obtener el mismo resultado sin crear la lista.
En python3
list(dict.values())[0]
Siempre puedes hacer:
for k in sorted(d.keys()):
print d[k]
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
# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())
# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())
# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'apple pie'
print d.keys()
print sorted(d.keys())
Tenga en cuenta que el diccionario se ordena cuando se imprime. ¡Pero el conjunto de claves es esencialmente un hashmap!
Para Python 2 y 3:
import six
six.next(six.itervalues(d))
Is there any better way to do this?
de manera breve.
first_key, *rest_keys = mydict
Sin bibliotecas externas, funciona tanto en Python 2.7 como en 3.x:
>>> list(set({"a":1, "b": 2}.values()))[0]
1
Para la clave aribtrary simplemente omita .values ()
>>> list(set({"a":1, "b": 2}))[0]
'a'
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:
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'