Сортировать список имен в Python, игнорируя числа?

['7', 'Google', '100T', 'Chrome', '10', 'Python']

Я бы хотел, чтобы результатом были все числа в конце, а остальные отсортированы. Числа не нужно сортировать.

Chrome
Google
Python
100T
7
10

Хотя это немного сложнее, потому что я сортирую словарь по значению.

def sortname(k): return get[k]['NAME']
sortedbyname = sorted(get,key=sortname)

Я добавил 100T только после того, как оба ответа были опубликованы, но принятый ответ все еще работает с небольшим изменением, которое я разместил в комментарии. Чтобы уточнить, имя, совпадающее с ^ [^ 0-9], должно быть отсортировано.

4 голоса | спросил user479870 30 +04002010-10-30T15:22:04+04:00312010bEurope/MoscowSat, 30 Oct 2010 15:22:04 +0400 2010, 15:22:04

2 ответа


0

Я изо всех сил пытался заставить работать версию словаря, поэтому вот версия массива, из которой вы можете экстраполировать:

def sortkey(x):
    try:
        return (1, int(x))
    except:
        return (0, x)

sorted(get, key=sortkey)

Основной принцип - создать кортеж, первый элемент которого объединяет все строки, а затем все целые. К сожалению, нет элегантного способа проверить, является ли строка целым числом без использования исключений, что не очень хорошо в лямбда-выражении. В моем первоначальном решении использовалось регулярное выражение, но, поскольку я перешел от лямбды к автономной функции, я решил, что с таким же успехом можно перейти к простому варианту.

ответил Marcelo Cantos 30 +04002010-10-30T15:23:34+04:00312010bEurope/MoscowSat, 30 Oct 2010 15:23:34 +0400 2010, 15:23:34
0
>>> l = ['7', 'Google', 'Chrome', '10', 'Python']
>>> sorted(l, key=lambda s: (s.isdigit(), s))
['Chrome', 'Google', 'Python', '10', '7']

Сортировка Python стабильна, поэтому вы также можете использовать несколько последовательных сортировок:

>>> m = sorted(l)
>>> m.sort(key=str.isdigit)
>>> m
['Chrome', 'Google', 'Python', '10', '7']
ответил adw 30 +04002010-10-30T15:39:50+04:00312010bEurope/MoscowSat, 30 Oct 2010 15:39:50 +0400 2010, 15:39:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132