Python сортирует строки с цифрами в начале - PullRequest
1 голос
/ 05 марта 2019

У меня есть такой список

list = [Tree, Plant, Bird, 7animal, Beta, 4qwerty]

когда я использую сортировку, это дает мне вывод как

sorted(list) = [Beta, Bird, Plant, Tree, 4qwerty, 7animal]

Но я хочу вывести что-то вроде этого

[Beta, Bird, 4qwerty, 7animal, Plant, Tree]

Так как я хочу рассмотреть 4=d и 7=g. Пример: я хочу рассмотреть {1=a, 2=b, 3=c, 4=d,....26=z} Как этого добиться?

 def sort_list(list):
    return sorted(list)

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Я думаю, вы могли бы заменить это digit на mapping как,

import re
import string

mapping = {str(idx): x for idx, x in enumerate(string.ascii_uppercase, 1)}
def key_func(val):
    match = re.search(r'^\d+', val)
    if match:
        digit = match.group()
        val = val.replace(digit, mapping[digit])
    return val

stuff = ['Tree', 'Plant', 'Bird', '7animal', 'Beta', '4qwerty']
x = sorted(stuff, key=key_func)
print(x)

['Beta', 'Bird', '4qwerty', '7animal', 'Plant', 'Tree']
0 голосов
/ 05 марта 2019

Входящий Старшеклассник :

Объяснение :

Функция NormalizeStrings() для получения значения уваженияцифру, начинающую строки из словаря и добавляем соответственно.

Функция replaceString() для замены значений из dict_

Функция DeNormalizeStrings() для выполнения противоположных NormalizeStrings()

Функция DereplaceString(), чтобы сделать противоположное replaceString()

alist = ['Tree', 'Plant', 'Bird', '7animal', 'Beta', '4qwerty']
alist2 = []

dict_ = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i',
         10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r',
         19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'}

def replaceString(s):
    return s[0].replace(s[0],dict_[int(s[0])])

def NormalizeStrings(alist):
    for s in alist:
        if s[0].isdigit():
            s = replaceString(s) + s[1:]
            alist2.append(s)
        else:
            alist2.append(s)

def DeReplaceString(s):
    for name in dict_:
        if dict_[name] == s[0]:
           return s[0].replace(s[0], str(name))

def DeNormalizeStrings(alist):
    alist2.clear()
    for s in alist:
        if s[0].islower():
            s = DeReplaceString(s) + s[1:]
            alist2.append(s)
        else:
            alist2.append(s)

NormalizeStrings(alist)
print(alist2)
print(sorted(alist2, key=lambda s: s.lower()))
DeNormalizeStrings(sorted(alist2, key=lambda s: s.lower()))
print(alist2)

ВЫХОД:

['Tree', 'Plant', 'Bird', 'ganimal', 'Beta', 'dqwerty']
['Beta', 'Bird', 'dqwerty', 'ganimal', 'Plant', 'Tree']
['Beta', 'Bird', '4qwerty', '7animal', 'Plant', 'Tree']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...