сортировать список словаря, беря целочисленное значение ключей, хранящихся в виде строки

У меня есть список словарей со значениями, хранящимися как строки. Я хочу отсортировать их, взяв значения как целые, а не строки. Код, который у меня есть

XWordDict=[{"name":"ABC","pos":"1"},{"name":"GHI","pos":"10"},{"name":"DEF","pos":"2"}] Xlistsorted=sorted(XWordDict,key=(operator.itemgetter("pos"))) 

Это дает заказ как

 [{'name': 'ABC', 'pos': '1'}, {'name': 'GHI', 'pos': '10'}, {'name': 'DEF', 'pos': '2'}] 

однако я хочу, чтобы это было

  [{'name': 'ABC', 'pos': '1'}, {'name': 'DEF', 'pos': '2'}, {'name': 'GHI', 'pos': '10'}] 

Если я перейду на

 Xlistsorted=sorted(XWordDict,key=int(operator.itemgetter("pos))) 

он дает ошибку

 TypeError: int() argument must be a string or a number, not 'operator.itemgetter' 

  • Как сделать побитовые NOR Gate в Python (редактирование математики python для работы для меня)
  • экономный парсер - ошибка, пытающаяся разобрать грамматику задания
  • Python lxml / прекрасный суп, чтобы найти все ссылки на веб-странице
  • Есть ли API для Wireshark, разрабатывать программы / плагины, которые взаимодействуют с ним / улучшают его?
  • python: добавление словаря в список - я вижу указатель вроде поведения
  • Сохранять данные Tf-Idf
  • Python: расширенное синтаксис понимания вложенных списков
  • Как обрабатывать загрузку файлов через запрос PUT в Django?
  • 2 Solutions collect form web for “сортировать список словаря, беря целочисленное значение ключей, хранящихся в виде строки”

    key аргументом должна быть функция. operator.itemgetter(i) возвращает функцию, но для того, чтобы добавить дополнительную обработку поверх этого, вам придется использовать лямбда. Поскольку itemgetter возвращает функцию, вы можете вызвать результат, чтобы использовать его в словаре (который вы передаете как x в лямбда:

     listsorted = sorted(XWordDict, key=lambda x: int(operator.itemgetter("pos")(x))) listsorted Out[16]: [{'name': 'ABC', 'pos': '1'}, {'name': 'DEF', 'pos': '2'}, {'name': 'GHI', 'pos': '10'}] 

    Тем не менее, itemgetter может быть слишком сложным решением здесь, вы можете просто сделать:

     listsorted = sorted(XWordDict, key=lambda x: int(x['pos'])) 

    Аргумент для ключевого слова «sort» () «sorted ()» является унарной функцией, которая возвращает фактическое значение, которое вы хотите отсортировать. Таким образом, вам понадобится функция, которая преобразует каждый элемент списка (словарь, который мы будем называть d), обращается к значению, которое вы хотите сортировать, и преобразует его из строки в целое.

     def dict_to_int(d): string_value = d['pos'] int_value = int(string_value) int_value 

    Вы передадите это сортировке () следующим образом:

     sorted_list = sorted(list_of_dicts, key=dict_to_int) 

    Эта функция является подробным примером и может быть значительно сокращена и преобразована в довольно сжатую лямбда:

     lambda d: int(d['pos']) 

    и используется таким образом:

     sorted_list = sorted(list_of_dicts, key=lambda d: int(d['pos'])) 
    Python - лучший язык программирования в мире.