Короткий ответ:
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"))
Объяснение:
Списки могут быть отсортированы с помощью параметра« ключ », который по сути может быть любым. Поскольку ваши имена файлов по сути являются числовым типом (int), но сформированы как строки, python также сортирует их как строки. Поэтому, чтобы получить числовую сортировку, нам нужно сначала преобразовать их обратно в числа. Поскольку они нужны нам только для сортировки, мы можем создать лямбда-функцию, преобразующую имена файлов, прежде чем рассматривать их для сортировки.