Python 字母排序二维列表不工作

Python Alphabetical Sorting 2D list not working

我有一个包含 4 列的列表:

L = [[0, '0000000', 'Hashfunction.jpg', 258883, '.jpg'],
     [1, '0000001', 'a_test_grey.jpg', 24186, '.jpg'],
     [2, '0000002', 'b_test_grey.jpg', 4256, '.jpg'],
     [3, '0000003', 'IMG_20210323_062719.jpg', 6704108, '.jpg']]

我必须根据第 3 列文件名的字母顺序对这个列表进行排序。 我尝试了不同的方法,但我仍然没有成功。

方法一:

sorted(L,key=lambda x:x[2])

结果:

[[0, '0000000', 'Hashfunction.jpg', 258883, '.jpg'],
 [3, '0000003', 'IMG_20210323_062719.jpg', 6704108, '.jpg'],
 [1, '0000001', 'a_test_grey.jpg', 24186, '.jpg'],
 [2, '0000002', 'b_test_grey.jpg', 4256, '.jpg']]

=> 这是不正确的!

方法二:

sorted(L, key=operator.itemgetter(2))

结果:

[[0, '0000000', 'Hashfunction.jpg', 258883, '.jpg'],
 [3, '0000003', 'IMG_20210323_062719.jpg', 6704108, '.jpg'],
 [1, '0000001', 'a_test_grey.jpg', 24186, '.jpg'],
 [2, '0000002', 'b_test_grey.jpg', 4256, '.jpg']]

=> 这也不正确!通常名称为 'a_test_grey.jpg' 的文件应该是结果中的第一个!

当我更改排序参数时,命令中的列索引从 2 更改为 0、1、3,排序根据列索引正常工作。但是列[2]的字母排序不起作用!

命令有什么问题?

它将大写字母排在小写字母之前。 你可以试试:

sorted(L,key=lambda x:x[2].upper())

字符串比较使用 ASCII table,因此大小写一组接一组。所以所有大写字母总是小于小写字母。

如果需要,在提供密钥时将所有内容转换为小写(或者大写):

L = [[0, '0000000', 'Hashfunction.jpg', 258883, '.jpg'],
     [1, '0000001', 'a_test_grey.jpg', 24186, '.jpg'],
     [2, '0000002', 'b_test_grey.jpg', 4256, '.jpg'],
     [3, '0000003', 'IMG_20210323_062719.jpg', 6704108, '.jpg']]

print(sorted(L, key=lambda x: x[2].lower()))
# >>> [[1, '0000001', 'a_test_grey.jpg', 24186, '.jpg'], [2, '0000002', 'b_test_grey.jpg', 4256, '.jpg'], [0, '0000000', 'Hashfunction.jpg', 258883, '.jpg'], [3, '0000003', 'IMG_20210323_062719.jpg', 6704108, '.jpg']]