我制作了一个看起来像这样的文本文件:
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
我一直在敲打这个问题好几个小时,我不知道为什么它不合适。 建议?
答案 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