这个断言语句测试的是什么类型的数据结构?

What type of data structure is this assert statement testing for?

我无法使以下断言语句起作用:

assert(data[5] == {
    'tone': ['line', 'five', 'Test', 'one', '.'],
    'ttwo': ['line', 'five', 'Test', 'two', '.'], 
    'tline': [3]
})

我的理解是,它正在测试每个列表("tone"、"ttwo"和"tline")中第5位索引的数据,但是"data" 意思是字典?它有大括号,但是,如果它是一个字典,它会生成 "tone"、"ttwo" 和 "tline" 键,而不是列表,这对我来说没有意义。

或者,data 是一个包含更多列表(tonettwotline)的列表,这些列表本身包含更多的字符串或数字列表?

我认为我拥有 tonettwotline 的正确格式的数据(见下文);我只是想不通如何将它们放入 "data" 以使此断言语句起作用。

tone = ['line', 'five', 'Test', 'one', '.']
ttwo = ['line', 'five', 'Test', 'two', '.']
tline = 3

我已经尝试用我知道的所有方法解决这个问题(将 data 设置为 list/tuple/dictionary),但我没有成功。我看过了,但我找不到相同类型的数据结构或断言语句的类似问题。

如果 data[5] 是任何东西,那么 data 可能是一个列表(或其他一些序列,如元组,甚至是字典或其他碰巧以整数作为键的映射——但是无论如何,您可以 给它 一个列表,此代码将接受它)。

同时,如果将 data[5] 与带有 == 的字典进行比较,则几乎可以肯定它是一个字典。因此,data 不仅仅是任何列表,而是第 5 个元素是字典的列表。我们不知道前 5 个元素(或超过 5 个的任何元素)可能是什么,但由于断言不检查它们,我们可以放任何我们想要的东西。

至于那个 data[5] 字典的成员——好吧,你几乎是对的。它们都是列表——两个字符串列表和一个整数列表——但请注意你写了 tline = 3。一个 int 的列表与那个 int 的值不同;你需要这份清单。

所以,让我们构建它 inside-out:

tone = ['line', 'five', 'Test', 'one', '.']
ttwo = ['line', 'five', 'Test', 'two', '.']
tline = [3]
data5 = {'tone': tone, 'ttwo': ttwo, 'tline': tline}
data = [data5 for _ in range(6)]

现在,它会过去的。

你的理解有点偏差。 assert 检查 data 的第 6 个元素是否是具有这些值的目录。传递此语句的数据赋值可能如下所示:

data = [0, 1, 2, 3, 4,
    {
     'tone': tone,
     'ttwo': ttwo,
     'tline': tline}]

现在断言通过了。

data[5] 是一个包含键 "tone""ttwo""tline" 的字典。与每个键关联的值是一个列表。

data 本身可以是列表或字典——或任何其他接受整数键的数据结构(data[5] 并不明确表明 data 必须是任何特定类型)——但它是可能一个列表。

你可以写一个 data 来通过测试:

data = [None, None, None, None, None,
        {'tone': ['line', 'five', 'Test', 'one', '.'],
         'ttwo': ['line', 'five', 'Test', 'two', '.'], 
         'tline': [3]}]