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']]
我有一个包含 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']]