1. ホーム
  2. python

[解決済み】TypeError: 'dict_keys' オブジェクトはインデックスをサポートしていません。

2022-01-22 13:02:18

質問

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]

を実行すると shuffle 関数は、次のようなエラーを発生させます。

TypeError: 'dict_keys' object does not support indexing

解決方法は?

明らかに d.keys() を、あなたの shuffle 関数を使用します。 おそらく、これは python2.x で書かれたものでしょう ( d.keys() はリストを返します)。 python3.xでは d.keys() が返されます。 dict_keys オブジェクトに近い振る舞いをします。 set よりも list . そのため、インデックスされることはありません。

解決策は list(d.keys()) (または単に list(d) から shuffle .