Python TypeError:“设置”对象不可下标

时间:2019-11-26 00:22:02

标签: python

myFunction.js

当我对此方法const spyStore = jest.spyOn(store, "dispatch"); 进行函数调用时,我在网上遇到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'})。 来自Java背景,这在某种程度上与类型转换有关吗? 错误是否表示我正在将一组数据结构传递给列表函数? 如何解决?

3 个答案:

答案 0 :(得分:1)

就像@Carcigenicate在评论中说的那样,由于集在Python中的无序性质,无法对集进行索引。相反,您可以在itertools.islice循环中使用while从给定集合创建的迭代器中一次获取200个项目:

from itertools import islice

def create(ids):
    policy = {
        'Statement': []
    }
    i = iter(ids)
    while True:
        chunk = list(islice(i, 200))
        if not chunk:
            break
        policy['Statement'].append({
            'Principal': {
                'AWS': list(map(lambda id: f"arn:aws:iam::{id}:root", chunk))
            }
        })
    return policy

答案 1 :(得分:1)

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

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

错误列表{1,2,3}

右侧列表 [1,2,3]

此链接详细说明了列表 https://www.w3schools.com/python/python_lists.asp

答案 2 :(得分:0)

根据Python的官方文档,set数据结构称为Unordered Collections of Unique Elements,它不支持索引或切片等操作。

  

与其他集合一样,集合支持set中的x,len(set)和set中的x。集是无序集合,不记录元素位置或插入顺序。因此,集合不支持索引,切片或其他类似序列的行为。

当您定义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