Python TypeError:'set'对象不可下标

use*_*245 11 python

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
Run Code Online (Sandbox Code Playgroud)

当我对该方法进行函数调用时,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 背景,这与类型转换有某种关系吗?该错误是否意味着我将设置的数据结构传递给列表函数?这怎么可能解决?

小智 11

我在处理 python 中的列表时遇到了同样的问题

在Python中,列表是用方括号而不是大括号定义的

错误的列表:({1, 2, 3}它实际上创建了一个集合,而不是一个列表)

右表[1, 2, 3]

此链接详细说明了有关列表的更多信息:
https ://www.w3schools.com/python/python_lists.asp


小智 8

根据 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
Run Code Online (Sandbox Code Playgroud)