我一直试图让程序打印出一个排序列表,具体取决于所请求的项目。当我从CSV文件中请求列表时,我不确定如何将4个值中的2个设置为整数,就像在程序中显示时一样,数字被视为字符串,并且它没有正确排序
例如:
[' Jess',' F',' 2009',' 6302']
[' Kat',' F',' 1999',' 6000']
[' Alexander',' M',' 1982',' 50']
[' Bill',' M',' 2006',' 2000']
[' Jack',' 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
答案 0 :(得分: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]))