2016-04-30 59 views
3

我將如何開始對此列表進行排序,以便按照轉換率(它涉及從文本文件中讀取數據)確定的順序顯示國家/地區的名稱?使用元組排序的入門者

America,Dollar,1 
Argentina,Peso,8.257 
Australia,Dollar,1.432 
Austria,Euro,0.82 

我對如何開始有一個大致的想法,但我不知道該從這裏做什麼。這是我到目前爲止:

fhand = open('Exchange.txt') 
for line in fhand: 
    line = line.split(',') 
print line[0], line[2] 

編輯:我希望它只顯示國家的名稱,而不是匯率。另外,我是一個新手,所以越簡單的答案越有幫助,我越能理解/學習越好。輸出應該是這樣的:

Austria 
Australia 
America 
Argentina 
+1

讀入數據框一個,然後排序數據框 – 2016-04-30 22:44:05

回答

3

如果你不介意的多維表的結果,這裏有一個相對較短的方式做到這一點。

EXCHANGE.TXT:

America,Dollar,1 
Argentina,Peso,8.257 
Australia,Dollar,1.432 
Austria,Euro,0.82 

代碼:

with open('Exchange.txt') as f: 
    lines = [x.strip().split(",") for x in f.readlines()] 
    #reverse = True for descending sorted order 
    lines.sort(key=lambda x: float(x[-1]), reverse=True) 
    print(lines) 

結果:

[['Argentina', 'Peso', '8.257'], ['Australia', 'Dollar', '1.432'], 
['America', 'Dollar', '1'], ['Austria', 'Euro', '0.82']] 

沒有reverse=True(升序)

[['Austria', 'Euro', '0.82'], ['America', 'Dollar', '1'], 
['Australia', 'Dollar', '1.432'], ['Argentina', 'Peso', '8.257']] 
+0

什麼是隻有國家,而不是打印的最佳方式的國家,單位和匯率? – Rob

2

所以,首先你想把你的數據讀入單個元組列表(或者任何序列,但是最好使用元組,因爲你知道大小),如下所示。請注意,我用的是with open() as f結構來自動關閉文件,我們讀完之後:

data = [] 
with open('Exchange.txt') as fhand: 
    for line in fhand: 
     data.append(line.split(',')) 

現在,我們希望這個使用built-in sorting functions排序:

data.sort(key = lambda item: float(item[-1])) 

有了這一切放在一起,並使用map略有簡化:

with open('Exchange.txt') as fhand: 
    data = map(lambda line: line.split(','), fhand) 
data.sort(key = lambda item: float(item[-1])) 
1

它可能是很容易的,如果你可以用熊貓模塊:

import pandas as pd 

fn = r'D:\temp\.data\36961029.csv' 
df = pd.read_csv(fn, header=None, names=['country','cur','rate']).sort_values(by='rate') 

# print sorted 
print(df) 

# save sorted DF to new CSV 
df.to_csv('sorted_data.csv', index=False) 

輸出:

 country  cur rate 
3 Austria Euro 0.820 
0 America Dollar 1.000 
2 Australia Dollar 1.432 
1 Argentina Peso 8.257 

sorted_data.csv:

country,cur,rate 
Austria,Euro,0.82 
America,Dollar,1.0 
Australia,Dollar,1.432 
Argentina,Peso,8.257