2016-06-19 6 views
0

私はプログラムが要求された項目に応じてソートされたリストをプリントアウトしようとしています。 CSVファイルからリストをリクエストすると、4つの値のうち2つだけを整数に設定する方法がわかりません。プログラムに表示される数値は文字列として扱われ、正しくソートされません。特定の値をリストから整数に変更する

例:

[ 'ジェス'、 'F'、 '2009'、 '6302']

[ 'キャット'、 'F'、 '1999'、 '6000']

[ 'アレクサンダー'、 'M'、 '1982'、 '50']

[ 'ビル'、 'M'、 '2006'、 '2000']

[ 'ジャック'、 ' M '、' 1998 '、' 1500 ']

def sortD(choice): 
      clear() 
      csv1 = csv.reader(open('TestUnsorted.csv', 'r'), delimiter=',') 
      sort = sorted(csv1, key=operator.itemgetter(choice)) 
      for eachline in sort: 
        print (eachline) 
      open('TestUnsorted.csv', 'r').close() 

      #From here up is where I'm having difficulty 

      with open('TestSorted.csv', 'w') as csvfile: 
        fieldnames = ['Name', 'Gender', 'Year','Count'] 
        csv2 = csv.DictWriter(csvfile, fieldnames=fieldnames, 
        extrasaction='ignore', delimiter = ';') 
        csv2.writeheader() 
        for eachline in sort: 
          csv2.writerow({'Name': eachline[0] ,'Gender': eachline[1],'Year':eachline[2],'Count':eachline[3]}) 
          List1.insert(0, eachline) 
      open('TestSorted.csv', 'w').close 

はここに私のTestUnsortedファイルは次のようになります。

ジャック、M、1998,1500

ビル、M、2006,2000

キャット、F、1999,6000

ジェス、F、2009,6302

アレクサンダー、M、1982,50

答えて

1
sort = sorted(csv1, key=lambda ch: (ch[0], ch[1], int(ch[2]), int(ch[3]))) 

これは最後の2つの値を整数としてソートします。

EDIT:

さらに質問を読めば、私はchoiceはあなたが上にソートするリストのインデックスです実現しています。

 if choice < 2: # or however you want to determine whether to cast to int 
      sort = sorted(csv1, key=operator.itemgetter(choice)) 
     else: 
      sort = sorted(csv1, key=lambda ch: int(ch[choice])) 
+0

私のソートは性別でしか分類できません:/ –

+0

私は正しい質問に答えなかったことに気づきました。編集されたバージョンを試してください。 –

+0

うまくいった乾杯した仲間、<3 –

関連する問題