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

List of dictionary can sort with appropriate result

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

简答:

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))

如果您更喜欢 "normal" 函数:

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

解释:

列表可以使用 "key" 参数进行排序,基本上可以是任何参数。 由于您的文件名本质上是数字 type(int) 但格式为字符串 python 也将它们排序为字符串。因此,为了获得数字排序,我们需要先将它们转换回数字。由于我们只需要那些用于排序,我们可以创建一个 lambda 函数来转换文件名,然后再考虑它们进行排序。