python agregar - Accede a un elemento arbitrario en un diccionario en Python




7 Answers

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 quieres que funcione tanto en Python 2 como en 3, puedes usar el paquete six :

six.next(six.itervalues(mydict))

aunque en este punto es bastante críptico y prefiero su código.

Si quieres eliminar algún artículo, haz:

key, value = mydict.popitem()

Tenga en cuenta que "primero" no es un término apropiado aquí. Esto es "cualquier" artículo, porque dict no es un tipo ordenado.

elementos lista

Si un mydict no está vacío, mydict a un elemento arbitrario como:

mydict[mydict.keys()[0]]

¿Hay alguna manera mejor de hacer esto?




En python3, el camino:

dict.keys() 

devuelva un valor en type: 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 método de empalme de 1er miembro por lista:

list(dict.keys())[0]



Como han mencionado otros, no hay "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 te importa el orden en el que se insertaron las claves, es decir, "primero" significa "insertado lo más temprano posible", luego en Python 3.1 puedes usar collections.OrderedDict . para versiones anteriores de Python, descargue, instale y use el puerto de soporte dict dictado (2.4 y posterior) que puede encontrar here .




Ignorando los problemas relacionados con el orden de dictado, esto podría ser mejor:

next(dict.itervalues())

De esta manera evitamos la búsqueda de elementos y generamos una lista de claves que no usamos.

Python3

next(iter(dict.values()))



Siempre puedes hacer:

for k in sorted(d.keys()):
    print d[k]

Esto le dará un conjunto de claves ordenadas consistentemente (con respecto a .hash () supongo) que puede procesar si la clasificación tiene algún significado para usted. Eso significa que, por ejemplo, los tipos numéricos se ordenan de manera consistente incluso si amplía 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 está ordenado cuando se imprime. Pero el conjunto de claves es esencialmente un hashmap!




No hay bibliotecas externas, funciona en Python 2.7 y 3.x:

>>> list(set({"a":1, "b": 2}.values()))[0]
1

Para una clave aribtraria simplemente deja fuera .values ​​()

>>> list(set({"a":1, "b": 2}))[0]
'a'



Subclasificar dict es un método, aunque no es eficiente. Aquí, si proporciona un número entero, devolverá d[list(d)[n]] ; de lo contrario, acceda al diccionario como se espera:

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'



Related