2016-06-19 35 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 –