2016-10-11 2 views
0
def salary_sort(thing): 
    def importantparts(thing): 
     for i in range(1, len(thing)): 
      a=thing[i].split(':') 
      output = (a[1],a[0],a[8]) 
      sortedlist = sorted(output, key = lambda item: item[2], reverse=True) 
      print(sortedlist) 
    return importantparts(thing) 

salary_sort(employee_data) 

この関数は、給与で名前のリストをソートすることになっています。 別名ラムダ関数Python3出力に変更なし

employee_data = ["FName LName Tel  Address City State Zip Birthdate Salary", 
"Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000", 
"Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500", 
"Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500",.... etc.] 

出力

['Putie', 'Arthur', '126000'] 
['Kertz', 'Barbara', '268500'] 
['Betty', 'Boop', '14500'] 
['Hardy', 'Ephram', '56700'] 
['Fardbarkle', 'Fred', '780900'] 
['Igor', 'Chevsky', '23400'] 
['James', 'Ikeda', '45000'] 
['Cowan', 'Jennifer', '58900'] 
['Jesse', 'Neal', '500'] 
['Jon', 'DeLoach', '85100'] 
['Jose', 'Santiago', '95600'] 
['Karen', 'Evich', '58200'] 
['Lesley', 'Kirstin', '52600'] 
['Gortz', 'Lori', '35200'] 
['Corder', 'Norma', '245700'] 
+1

また、テストに使用した 'thing'の例を挙げることができますか? – 3kt

+0

(どこに置くかによって) 'sorted()'の代わりに 'a.sort()'を使うべきでしょう。あなたは返されたリスト 'sortedlist'を再利用していません。 'sorted()'はソートされず、新しいソートされたリストを返します。 – cdarke

+0

コードは整列だけでなく整列しています。あなたはタプルだけでなくタプルのリストとして 'a'を持っていますか? 'a 'の内容を提供してもいいですか? –

答えて

2

コードにはいくつかの問題がありますが、重要な点は、リストのリストではなく、の各行をごとにソートすることです。また

  • importantparts()

    は何も(そうsalarysort()戻りなし)を返しません。

  • あなたはそれが値で適切にソートされるように(それらはすべて同じフィールド幅を持っていないので、英数字のソートが正しくありません)intSalaryフィールドをキャストする必要があります。

  • 最後に、あなたが最初の要素を削除するsliceを取って、thing上に直接反復処理することができ、for i in range(1, len(thing)):を使用する必要はありません。

これが最後にそれ自体間違っではありませんが、反復可能な上に直接反復処理するより「Python的」とみなされる。という注意

def salary_sort(thing): 
    def importantparts(thing): 
     unsortedlist = [] 
     for item in thing[1:]: 
      a=item.split(':') 
      unsortedlist.append([a[1],a[0],int(a[8])]) 
     print unsortedlist 
     sortedlist = sorted(unsortedlist, key = lambda item: item[2], reverse=True) 
     return (sortedlist) 
    return importantparts(thing) 

employee_data = ["FName LName Tel  Address City State Zip Birthdate Salary", 
       "Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000", 
       "Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500", 
       "Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500"] 


print salary_sort(employee_data) 

出力:

[['Kertz', 'Barbara', 268500], ['Putie', 'Arthur', 126000], ['Boop', 'Betty', 14500]] 
0

employee_data「シング」私は最初の姓と給与を隔離するために管理が、私はそれが彼らの給料で

をソートするように見えることはできません問題は、全体の配列ではなく、個の要素(意味は['Putie', 'Arthur', '126000'])を給与値に基づいてソートすることです。

また、給与をソートする場合は、intにキャストする必要があります。そうでない場合は、アルファベット順のソートが使用されます。

あなたは以下を見てみることができます

:予想通り、与え

def salary_sort(thing): 
    def importantparts(thing): 

     data = [] 

     for i in range(1, len(thing)): 
      a=thing[i].split(':') 
      output = (a[1],a[0],int(a[8])) 
      data.append(output) 

     data.sort(key=lambda item: item[2], reverse=True) 
     return data 

    return importantparts(thing) 

employee_data = ["FName LName Tel  Address City State Zip Birthdate Salary", \ 
"Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000", \ 
"Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500", \ 
"Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500"] 

print(salary_sort(employee_data)) 

:私は新しい配列に従業員のためのすべての関連データがプッシュされていた何

[('Kertz', 'Barbara', 268500), ('Putie', 'Arthur', 126000), ('Boop', 'Betty', 14500)] 

dataと命名)し、lambda関数を使用してこの配列をソートしました。

+0

これは給与で正しくソートされません。 – SiHa

1

あなたの主な問題は、あなたが最初にデータを蓄積して、ソートするのではなく、それぞれの新しいoutputシーケンスをリセットすることです。別の問題は、あなたの外部関数が内部関数を宣言して呼び出すことですが、内部関数は何も返しませんでした。最後に、文字列を整数に変換せずにソートすると、英数字のソート( '9'、 '81'、 '711'、 '6')が得られます。

ちなみに、外側の内側の機能パターンはここでは役に立たず、単純な直接関数を使用することができます。

def salary_sort(thing): 
    output = [] 
    for i in range(1, len(thing)): 
     a=thing[i].split(':') 
     output.append([a[1],a[0],a[8]]) 
    sortedlist = sorted(output, key = lambda item: int(item[2]), reverse=True) 
    return sortedlist 

期待通りの結果がある:

[['Kertz', 'Barbara', '268500'], ['Putie', 'Arthur', '126000'], ['Boop', 'Betty', '14500']] 

あなたは給料のために数字を好む場合は、一段高い変換を実行します。

def salary_sort(thing): 
    output = [] 
    for i in range(1, len(thing)): 
     a=thing[i].split(':') 
     output.append([a[1],a[0],int(a[8])]) 
    sortedlist = sorted(output, key = lambda item: item[2], reverse=True) 
    return sortedlist 

をし、結果は再度正しく:

[['Kertz', 'Barbara', 268500], ['Putie', 'Arthur', 126000], ['Boop', 'Betty', 14500]] 
関連する問題