在python中对嵌套列表进行排序会导致TypeError

时间:2019-07-03 05:57:02

标签: python python-3.x

我下面的嵌套列表(列表的列表)名为row_list

[
    [
        {
            'text': 'Something',
            'x0': Decimal('223.560')
        },
        {
            'text': 'else',
            'x0': Decimal('350')
        },
        {
            'text': 'should',
            'x0': Decimal('373.736')
        },
        {
            'text': 'be',
            'x0': Decimal('21.600')
        }
    ],
    [
        {
            'text': 'here',
            'x0': Decimal('21.600')
        }
    ]
]

我正在尝试通过x0键对所有内部列表进行排序:

row_list = sorted(row_list, key=lambda x:x['x0'])

但是,上面的错误给了我

  

TypeError:列表索引必须是整数或切片,而不是str

我也尝试过使用itemgetter

row_list = sorted(row_list, key=itemgetter('x0'))

但这给了我同样的错误。

我在做什么错了?

2 个答案:

答案 0 :(得分:4)

您有一个嵌套列表。如果要创建新列表:

row_list = [list(sorted(item, key=lambda x: x["x0"])) for item in row_list]

产生

[[{'text': 'be', 'x0': Decimal('21.600')},
  {'text': 'Something', 'x0': Decimal('223.560')},
  {'text': 'else', 'x0': Decimal('350')},
  {'text': 'should', 'x0': Decimal('373.736')}],
 [{'text': 'here', 'x0': Decimal('21.600')}]]

如果您想保留原始列表,也可以内联排序而不是创建新列表:

for sublist in row_list:
     sublist.sort(key=lambda x: x["x0"])

答案 1 :(得分:1)

from decimal import Decimal
l = [
    [
        {
            'text': 'Something',
            'x0': Decimal('223.560')
        },
        {
            'text': 'else',
            'x0': Decimal('350')
        },
        {
            'text': 'should',
            'x0': Decimal('373.736')
        },
        {
            'text': 'be',
            'x0': Decimal('21.600')
        }
    ],
    [
        {
            'text': 'here',
            'x0': Decimal('21.600')
        }
    ]]

for i in l:
    i.sort(key=lambda x:x['x0'])

print(l)

输出

    [[{'text': 'be', 'x0': Decimal('21.600')},
  {'text': 'Something', 'x0': Decimal('223.560')},
  {'text': 'else', 'x0': Decimal('350')},
  {'text': 'should', 'x0': Decimal('373.736')}],
 [{'text': 'here', 'x0': Decimal('21.600')}]]