2016-06-19 36 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文件看起來是這樣的:

傑克,男,1998,1500

比爾,男,2006,2000

吉,F,1999,6000

傑斯,F,2009,6302

亞歷山大,男,1982,50

回答

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

這會將最後兩個值排序爲整數。

編輯:

在進一步閱讀的問題,我意識到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 –