使用Sorted()函数

时间:2014-02-24 07:46:27

标签: python sorting text sorted

我制作了一个看起来像这样的文本文件:

Houston 69.7 degrees F 2,144,491
Hialeah 77.9 degrees F 217,141
Miami 77.3 degrees F 404,048
Carol City 77.3 degrees F 59,443
North Westside 77.3 degrees F 101,285

我正在尝试按温度从最小到最大排序。这是我到目前为止的尝试。 mf2是包含我的列表的文件,mf3是我正在写的文件。

h = aline.find('degrees')
for aline in sorted(mf2, key=lambda aline: aline[(h-5):(h-1)], reverse=False):
    mf3.write(aline)
mf3.close()

该代码不断返回如下所示的列表:

Houston 69.7 degrees F 2,144,491
Hialeah 77.9 degrees F 217,141
Miami 77.3 degrees F 404,048
Carol City 77.3 degrees F 59,443
Miramar 76.9 degrees F 108,072
Tamiami 76.8 degrees F 54,788

我一直在敲打这个问题好几个小时,我不知道为什么它不合适。 建议?

2 个答案:

答案 0 :(得分:3)

假设每一行的格式为name temperature "degrees F" some-number,您可以尝试

sorted (mf2, key = lambda x: float (x.split (' ') [-4] ) )

答案 1 :(得分:0)

data=["Houston 69.7 degrees F 2,144,491",
"Hialeah 77.9 degrees F 217,141",
"Miami 77.3 degrees F 404,048",
"Carol City 77.3 degrees F 59,443",
"North Westside 77.3 degrees F 101,285"]

city=[]
temperature=[]
measure=[]
counts=[]

for s in data:
    #print(s)
    all_matches = re.findall(r'([a-zA-Z]+\s*[a-zA-Z]*)|([0-9.,]+)',s)
    city.append(all_matches[0][0])
    temperature.append(all_matches[1][1])
    measure.append(all_matches[2][0])
    counts.append(all_matches[3][1])


    df=pd.DataFrame({'city':city, 'temperature':temperature, 'measure':measure, 'counts':counts})
    df['temperature']=df['temperature'].astype('float')
    df['counts']=df['counts'].apply(lambda row: int(row.replace(',','')))
    print(df.sort_values(by='counts', ascending=False))

输出:

            city  temperature    measure   counts
0        Houston          69.7  degrees F  2144491
2          Miami          77.3  degrees F   404048
1        Hialeah          77.9  degrees F   217141
4  North Westside         77.3  degrees F   101285
3      Carol City         77.3  degrees F    59443