将特定值从列表更改为整数

时间:2016-06-19 04:03:08

标签: python sorting

我一直试图让程序打印出一个排序列表,具体取决于所请求的项目。当我从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

1 个答案:

答案 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]))