2017-09-03 2 views
0

私は同じフォーマット 'Name%Department%Age'に従う文字列で構成されたリストを持っています。異なる部分によって4つの部分に分割された文字列のリストを並べ替えますか?

年齢、名前、部署別にリストを注文したいと思います。

['Sarah%English%50, 'John%English%31', 'George%Maths%30', 'John%English%30, 'John%Maths%30'] 

私は私が欲しいものを発見した最も近いが、(ここで見つける:How to sort a list by Number then Letter in python?)以下の通りです:出力しまう仕分けした後

alist = ['John%Maths%30', 'Sarah%English%50', 'John%English%30', 'John%English%31', 'George%Maths%30'] 

import re 

def sorter(s): 

    match = re.search('([a-zA-Z]*)(\d+)', s) 

    return int(match.group(2)), match.group(1) 


sorted(alist, key=sorter) 

Out[13]: ['1', 'A1', '2', '3', '12', 'A12', 'B12', '17', 'A17', '25', '29', '122'] 

これは、しかし、唯一の私のレイアウトをソートアルファベット順に入力します。

ありがとうございます。

ありがとうございます。

答えて

2

あなたは正しい方向にあります。

個人的に、I:

  • は、最初にその構成部分に文字列をチョップするstring.split()を使用します。
  • この場合、ソートキーは、目的のソート順を反映するタプルを生成します。例えば

def key(name_dept_age): 
    name, dept, age = name_dept_age.split('%') 
    return -int(age), name, dept 

alist = ['John%Maths%30', 'Sarah%English%50', 'John%English%30', 'John%English%31', 'George%Maths%30'] 

print(sorted(alist, key=key)) 
0

各項目の使用name, department, age = item.split('%')

は、その後、そのmultikeysort機能を https://stackoverflow.com/a/1144405/277267

sorted_items = multikeysort(items, ['-age', 'name', 'department'])

実験一度、このコードを使用してそれらを並べ替える{'name': name, 'department': department, 'age': age}

をそれらのうちの辞書を作成し、あなたはそれがで便利になるだろうことがわかりますあなたのプログラミングのキャリアの状況のカップル。

関連する問題