Как отсортировать dict.keys () или dict основываться на части отдельных ключей в словаре (python) - PullRequest
0 голосов
/ 29 января 2020

У меня есть dict.keys(), как показано ниже:

dict_keys(['[TH03438A] TRIPLE ACTION 175GM Twinpack_MY', 
'[1051931] CTBM TWISTER FH M +CAP 1PK ASIA*72', 
'[1108229] AJAX F'LOSO 2L AB APPLE/EPAL SEGAR (NEW)', 
'[1051987] CTBM TWISTER FH S +CAP 1PK ASIA*72', 
'[1106530] SOFTLAN 2L FLORAL FANTASY (PINK)', 
'TRIPLE ACTION 175GM TWINPACK_MY'])

Я хотел бы отсортировать его по названию продукта (ключам) после некоторых манипуляций, удалив номер продукта, если он есть (например: [TH03438A]) и пробел перед фактическим названием товара. Таким образом, отсортированные ключи должны быть возвращены следующим образом:

dict_keys(['[1108229] AJAX F'LOSO 2L AB APPLE/EPAL SEGAR (NEW)', 
'[1051931] CTBM TWISTER FH M +CAP 1PK ASIA*72', 
'[1051987] CTBM TWISTER FH S +CAP 1PK ASIA*72', 
'[1106530] SOFTLAN 2L FLORAL FANTASY (PINK)', 
'TRIPLE ACTION 175GM TWINPACK_MY', 
'[TH03438A] TRIPLE ACTION 175GM Twinpack_MY'])

Я пытался сделать это следующим образом:

test = sorted(report_table.keys(), key=lambda k : k.split('] ')[-1])

Но я думаю, что я делаю это неправильно; каким должен быть правильный аргумент для ключа (функция сортировки), чтобы я мог получить доступ к отдельным ключам dict?

1 Ответ

0 голосов
/ 29 января 2020

Используйте следующее решение: sorted(report_table.keys(), key=lambda item: item.split(']')[-1].strip())

Пример, основанный на ваших данных:

lst = ['[TH03438A] TRIPLE ACTION 175GM Twinpack_MY', '[1051931] CTBM TWISTER FH M +CAP 1PK ASIA*72', "[1108229] AJAX F'LOSO 2L AB APPLE/EPAL SEGAR (NEW)", '[1051987] CTBM TWISTER FH S +CAP 1PK ASIA*72', '[1106530] SOFTLAN 2L FLORAL FANTASY (PINK)', 'TRIPLE ACTION 175GM TWINPACK_MY']
assert sorted(lst, key=lambda item: item.split(']')[-1].strip()) == ['[1108229] AJAX F\'LOSO 2L AB APPLE/EPAL SEGAR (NEW)', '[1051931] CTBM TWISTER FH M +CAP 1PK ASIA*72', '[1051987] CTBM TWISTER FH S +CAP 1PK ASIA*72', '[1106530] SOFTLAN 2L FLORAL FANTASY (PINK)', 'TRIPLE ACTION 175GM TWINPACK_MY', '[TH03438A] TRIPLE ACTION 175GM Twinpack_MY']

Если вам нужно отсортировать словарь, вы должны сделать следующее:

import collections

sorted_list = sorted(report_table.items(), key=lambda items: items[0].split('] ')[-1])
sorted_report_table = collections.OrderedDict(sorted_list)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...