我下面的嵌套列表(列表的列表)名为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'))
但这给了我同样的错误。
我在做什么错了?
答案 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')}]]