create - python list index
TypeError: el objeto ''dict_keys'' no admite indexación (5)
def shuffle(self, x, random=None, int=int):
"""x, random=random.random -> shuffle list x in place; return None.
Optional arg random is a 0-argument function returning a random
float in [0.0, 1.0); by default, the standard random.random.
"""
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1) if random is None else int(random() * (i+1))
x[i], x[j] = x[j], x[i]
Cuando ejecuto la función de shuffle , se produce el siguiente error, ¿por qué?
TypeError: ''dict_keys'' object does not support indexing
¿Por qué necesita implementar shuffle cuando ya existe? Quédate sobre los hombros de los gigantes.
import random
d1 = {0:''zero'', 1:''one'', 2:''two'', 3:''three'', 4:''four'',
5:''five'', 6:''six'', 7:''seven'', 8:''eight'', 9:''nine''}
keys = list(d1)
random.shuffle(keys)
d2 = {}
for key in keys: d2[key] = d1[key]
print(d1)
print(d2)
En Python 2 dict.keys () devuelve una lista, mientras que en Python 3 devuelve un generador.
Solo puede iterar sobre sus valores; de lo contrario, puede convertirlo explícitamente en una lista, es decir, pasarlo a una función de lista.
Está claro que está pasando d.keys() a su función de shuffle . Probablemente esto fue escrito con python2.x (cuando d.keys() devolvió una lista). Con python3.x, d.keys() devuelve un objeto dict_keys que se comporta más como un set que como una list . Como tal, no puede ser indexado.
La solución es pasar la list(d.keys()) (o simplemente list(d) ) para shuffle .
Está pasando el resultado de somedict.keys() a la función. En Python 3, dict.keys no devuelve una lista, pero un objeto similar a un conjunto que representa una vista de las teclas del diccionario y (al ser configurado) no admite la indexación.
Para solucionar el problema, use list(somedict.keys()) para recopilar las claves, y trabaje con eso.
convertir iterativo a la lista puede tener un costo en lugar de lo que puede usar
next(iter(keys))
para el primer artículo o si desea itrate todos los artículos utilizan
items = iter(keys)
while True:
try:
item = next(items)
except StopIteration as e:
pass # finish