TypeError: 'dict_keys' object does not support indexing
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game Looping
--
Chapters
00:00 Typeerror: 'Dict_keys' Object Does Not Support Indexing
00:27 Accepted Answer Score 264
00:55 Answer 2 Score 13
01:20 Answer 3 Score 0
01:36 Answer 4 Score 13
01:54 Thank you
--
Full question
https://stackoverflow.com/questions/1732...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #python3x #dictionary
#avk47
ACCEPTED ANSWER
Score 264
Clearly you're passing in d.keys() to your shuffle function.  Probably this was written with python2.x (when d.keys() returned a list).  With python3.x, d.keys() returns a dict_keys object which behaves a lot more like a set than a list.  As such, it can't be indexed.
The solution is to pass list(d.keys()) (or simply list(d)) to shuffle.
ANSWER 2
Score 13
You're passing the result of somedict.keys() to the function. In Python 3, dict.keys doesn't return a list, but a set-like object that represents a view of the dictionary's keys and (being set-like) doesn't support indexing.
To fix the problem, use list(somedict.keys()) to collect the keys, and work with that.
ANSWER 3
Score 13
Convert an iterable to a list may have a cost. Instead, to get the the first item, you can use:
next(iter(keys))
Or, if you want to iterate over all items, you can use:
items = iter(keys)
while True:
    try:
        item = next(items)
    except StopIteration as e:
        pass # finish
ANSWER 4
Score 0
Why you need to implement shuffle when it already exists? Stay on the shoulders of giants.
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)