如何按2个整数排序

我尝试了许多选择,尝试使排序正确,但没有成功。 使用这段代码的目的是将一个完全排序的列表输出到winlist.txt上,但是它仅按第一个整数排序,因此无法正确排序。

let a = 10;
if(a){
    console.log("implicit coercion");
}

if(Boolean(a)){
    console.log("explicit coercion");
}

当前该片段代码输出:

def sort():
        winfile = list()
        with open ('winners.txt') as fin:
                for line in fin:
                        winfile.append(line.strip('\n'))
        winfile.sort()
        with open('SortWin.txt','w+') as fout:
                for winfile in winfile:
                        fout.write(winfile + '\n')

但是我希望排序使用2个整数而不是仅第一个进行排序。 这样2排在11排上方

pw942mn 回答:如何按2个整数排序

尝试使用key参数:

def sort():
    winfile = list()
    with open ('winners.txt') as fin:
            for line in fin:
                    winfile.append(line.strip('\n'))
    winfile.sort(key=lambda x: int(x.split()[0]))
    with open('SortWin.txt','w+') as fout:
            for winfile in winfile:
                    fout.write(winfile + '\n')
,

为了按第一列对行进行排序,您必须先对它们进行拆分,然后通过向key提供适当的sort()进行相应的排序:

import operator

if __name__ == "__main__":
    with open("to_be_sorted.txt","r",encoding="utf-8") as f:
        data = [line.split() for line in f.readlines()]

    sort_by_first_column = lambda line: int(operator.itemgetter(0)(line))
    data.sort(key=sort_by_first_column)

    for line in data:
        print(" ".join(line))
,

从winners.txt中读取后,您的winfile包含字符串列表。

这就是为什么sort()函数按字母顺序对字符串进行排序的原因。

一种方法,您可以将字符串拆分为两个项目元组/列表(最快的是split()拆分为list),将第一项转换为int。

现在,您对该列表进行排序。输出将是单独的字符串列表。

def get_key(pair):
    pair = pair.split()
    return int(pair[0])

def sort():
    winfile = list()
    with open ('winners.txt') as fin:
             for line in fin:
                    winfile.append(line.strip('\n'))
    winfile.sort(key = get_key)
    with open('SortWin.txt','w+') as fout:
            for winfile in winfile:
                    fout.write(winfile + '\n')
,

因为python open函数将返回某个String对象,所以像这样的数字"11"而不是11,您可以用int()进行转换,但是有简单的方法,请使用pandas模块。 我认为您的文字是这样的:

11 Tom
2 Tom
20 Ben
20 Tom
21 Ben

1。使用第三方(推荐)

第一。您应该安装熊猫pip install pandas

pands.read_csv site

import pandas as pd

# sep is Delimiter to use,default is comma
df = pd.read_csv('winners.txt',header=None,names=['num','name'],sep=' ',dtype={'num': int,'name': str})
df = df.sort_index(by='num')
df.to_csv('SortWin.txt',index=False,mode='w+')

最后,这样的结果

2 Tom
11 Tom
20 Ben
20 Tom
21 Ben

2。原始的python函数解决方案

不要使用第三方,我们也可以这样做。

def sort():
    winfile = list()
    with open ('winners.txt') as fin:
        for line in fin:
            winfile.append(line.strip('\n'))
    winfile.sort(key=lambda x: int(x.split(' ')[0]))
    with open('SortWin.txt','w+') as fout:
        for winfile in winfile:
            fout.write(winfile + '\n')
本文链接:https://www.f2er.com/3138246.html

大家都在问