字典列表可以以适当的结果排序
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 函数来转换文件名,然后再考虑它们进行排序。
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 函数来转换文件名,然后再考虑它们进行排序。