1. ホーム
  2. python

[解決済み】Python TypeError: 'set' オブジェクトは添え字が使えない

2022-02-14 22:33:23

質問

def create(ids):
    policy = {
        'Statement': []
    }
    for i in range(0, len(ids), 200):
        policy['Statement'].append({
            'Principal': {
                'AWS': list(map(lambda id: f"arn:aws:iam::{id}:root", ids[i:i + 200]))
            }
        })
    return policy

このメソッドに関数を呼び出すと create({'1','2'}) を取得します。 TypeError: 'set' object is not subscriptable の行でエラーが発生します。 'AWS': list(map(lambda id: f"arn:aws:iam::{id}:root", ids[i:i + 200])) . javaのバックグラウンドから、これは何らかの形でタイプキャストに関連しているのでしょうか? このエラーは、私がリスト関数にセットデータ構造を渡していることを意味するのでしょうか? どのようにこれを解決することができますか?

解決方法は?

Pythonの公式ドキュメントの通りです。 set と呼ばれるデータ構造です。 Unordered Collections of Unique Elements で、これはインデックスやスライスのような操作をサポートしていません。

他のコレクションと同様、セットもx in set, len(set), for x in setをサポートしています。順序のないコレクションであるため、セットは要素の位置や挿入順を記録しない。したがって、集合はインデックスやスライシング、その他のシーケンスに似た動作をサポートしません。

を定義すると temp_set = {1, 2, 3} を暗示しているだけです。 temp_set は3つの要素を含んでいますが、取得できるインデックスがありません。

>>> temp_set = {1,2,3}
>>> 1 in temp_set
>>> True
>>> temp_set[0]
>>> Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-10-50885e8b29cf>", line 1, in <module>
    temp_set[0]
TypeError: 'set' object is not subscriptable