2017-03-12 37 views
1

添加不同的數據,以不同的字典所以,我有一個文本文件,它看起來像:從文本文件

AUD_CHF 0.77324 
AUD_EUR 0.72657 
AUD_GBP 0.61557 
AUD_JPY 86.88 
AUD_USD 0.76835 
CAD_EUR 0.722459831 
CAD_GBP 0.612726326 
CAD_CHF 0.76915 
CHF_EUR 0.939858457 
CHF_GBP 0.795924865 

我想要做的就是通過它來讀取,並把每一種貨幣到它自己的字典如。 AUD {AUD_CHF: 0.77324, AUD_EUR :0.72657 AUD_GBP :0.61557 AUD_JPY :6.88, AUD_USD :0.76835} 然後是瑞士法郎,美元等。完成後將會有18本字典。我設法用下面的代碼來做到這一點(對另一個問題有一些幫助),但是我知道它很長並且不是很pythonic。它看起來像這樣

USD = {} 
AUD = {} 
CHF = {} 
with open('rates.txt', 'r') as f: 
    for line in f: 
     split_line = line.split() 
     if line.startswith('USD'): 
      USD[split_line[0]] = split_line[1] 
     elif line.startswith('AUD'): 
      AUD[split_line[0]] = split_line[1] 
     elif line.startswith('CHF'): 
      CHF[split_line[0]] = split_line[1] 

我的意思是,它的工作原理,但我不能imagaine沒有更好的方法。我和一位朋友交談,他提出了一個解決方案,它使用了vars(),local()以及我讀過的東西,這不是一件好事,我無法按照我想要的方式工作。我正在考慮某種類型的循環,但我無法得到任何進展。如果有人有任何想法讓我嘗試,我會很感激。即使它只是一個骨架,所以我可以去嘗試使它工作。

感謝您的時間,道歉這有點長。

回答

1

如何字典詞典和一​​些defaultdict:

from collections import defaultdict 
currencies = defaultdict(dict) 

with open('rates.txt', 'r') as f: 
    for line in f: 
     if line: 
      currency, rate = line.split() 
      currencies[currency[:3]][currency] = rate 

,導致:

In [39]: currencies['AUD'] 
Out[39]: 
{'AUD_CHF': '0.77324', 
'AUD_EUR': '0.72657', 
'AUD_GBP': '0.61557', 
'AUD_JPY': '86.88', 
'AUD_USD': '0.76835'} 

In [40]: currencies['CHF'] 
Out[40]: {'CHF_EUR': '0.939858457', 'CHF_GBP': '0.795924865'} 

In [41]: currencies['CAD'] 
Out[41]: {'CAD_CHF': '0.76915', 'CAD_EUR': '0.722459831', 'CAD_GBP': '0.612726326'} 

編輯。

如果您有不符合空間分隔線,你可以試一試/除塊除其他事項外:

from collections import defaultdict 
currencies = defaultdict(dict) 

with open('rates.txt', 'r') as f: 
    for line in f: 
     if line: 
      try: 
       currency, rate = line.split() 
      except ValueError: 
       # good practice to log here, if you were to have logging. 
       continue #skip to next line 
      currencies[currency[:3]][currency] = rate 
+0

我從來沒有聽說過的defaultdic。我有一些閱讀要做,謝謝,非常需要學習。 我輸入它並從第7行得到'ValueError:需要超過0個值才能解包'。基於[link](http://stackoverflow.com/questions/13891813/valueerror-need-more-than-0-values -to-unpack-python-lists)和[link](http://stackoverflow.com/questions/12687158/valueerror-need-more-than-0-values-to-unpack)(或者它是我做過的事情?)我改變了它,它貫穿始終。 '打印貨幣'不會返回字典,我不確定你是如何得到你的「結果」的。再次感謝,真的很感激你的時間。 – Pale

+0

@pale看到編輯,你的一行不符合第一個空格分隔,這是它所期望的。如果遇到這種情況,「貨幣」將不會有任何東西。 – salparadise

+0

我創建的數據集有兩個導致錯誤的重複項。我搜索了這個錯誤,在任何階段都沒有表明它是來自不良數據......這就是你如何學習,我猜。 @salparadise你的代碼是如此簡潔....我到處都有東西。再次感謝您幫助我。 – Pale