Список словарей можно отсортировать с соответствующим результатом - PullRequest
0 голосов
/ 27 мая 2020
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

1 Ответ

0 голосов
/ 27 мая 2020

Короткий ответ:

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 также сортирует их как строки. Поэтому, чтобы получить числовую сортировку, нам нужно сначала преобразовать их обратно в числа. Поскольку они нужны нам только для сортировки, мы можем создать лямбда-функцию, преобразующую имена файлов, прежде чем рассматривать их для сортировки.

...