词典列表可以按适当的结果排序

问题描述 投票:-1回答:1
list_dict = [{
'filename': '4008789155603(0).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(1).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(10).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(11).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(12).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(13).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(2).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(3).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(4).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(5).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(6).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(7).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(8).jpg',
'barcode': '4008789155603'
},
{
'filename': '4008789155603(9).jpg',
'barcode': '4008789155603'
}]

当我尝试根据'filename'值对字典列表进行排序时,它不会以适当的结果进行排序。

每次我得到-4008789155603(0).jpg,4008789155603(1).jpg,4008789155603(10).jpg,4008789155603(11).jpg

输出:4008789155603(0).jpg,4008789155603(1).jpg,4008789155603(3).jpg,4008789155603(4).jpg,...,4008789155603(10).jpg,4008789155603(11).jpg,4008789155603(12).jpg

python python-3.5
1个回答
0
投票

简短回答:

list_dict = [{ 'filename': '4008789155603(0).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(1).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(10).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(11).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(12).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(13).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(2).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(3).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(4).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(5).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(6).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(7).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(8).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(9).jpg', 'barcode': '4008789155603' }]

sorted(list_dict, key=lambda entry: int(entry.get("filename").replace("(", "").replace(")", "").strip(".jpg")))

为了提高可读性:

#input list
list_dict = [{ 'filename': '4008789155603(0).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(1).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(10).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(11).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(12).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(13).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(2).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(3).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(4).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(5).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(6).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(7).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(8).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(9).jpg', 'barcode': '4008789155603' }]

#sorting lambda function
f_sort = lambda entry : int(entry.get("filename").replace("(", "").replace(")", "").strip(".jpg"))

#output list
list_dict_sorted = sorted(list_dict, key=lambda entry: f_sort(entry))

如果您希望使用“正常”功能:

def f_sort(entry):
    return int(entry.get("filename").replace("(", "").replace(")", "").strip(".jpg"))

说明:

列表可以使用“键”参数进行排序,该参数本质上可以是任何东西。由于文件名本质上是数字type(int),但格式为字符串,因此python也会将它们排序为字符串。因此,要进行数字排序,我们需要先将它们转换回数字。因为我们只需要那些用于排序,所以我们可以创建一个lambda函数来转换文件名,然后再考虑对其进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.