2016-03-09 81 views
-1

此功能的想法是將文件作爲輸入。這個文件包含政治家與他們各自的黨派。獨立性是1,共和體是2,民主人是3,不知道是4.必須返回的是每一方代表的次數。詞典故障

該文件有獨立6,共和黨16,民主黨22,不知道6. 輸出應該是這樣的。

獨立6

共和黨16

民主黨22

不知道6

,但我有什麼是

3月22日

,我不知道如何改變表示各方實際各方的名稱數量。

def polDict(s1): 
     infile=open(s1,'r') 
     content=infile.read() 
     counters={} 
     party='1234' 
     wordList = content.split() 
     for i in wordList: 
      if i in party: 
       if i in counters: 
        counters[i]+=1 
       else: 
        counters[i]=1 
     for i in counters:    

      print('{:2} {}'.format(i,counters[i])) 
+0

這不是很清楚。你能重新調整你的問題嗎?數據在您的文件中是什麼樣的。另外,在這個問題中格式化的實際字典中重構您的預期輸出。最後,請解釋代碼中究竟出了什麼問題。 – idjaw

回答

0

您尚未提供有關您的文件外觀如何的信息;如果我正確地理解了你的代碼,那麼你需要做的是定義一個包含聚會名稱和它們各自的數字的字典,然後編輯你的打印語句以打印相應於i的聚會名稱,而不是i本身:

def polDict(s1): 
    infile=open(s1,'r') 
    content=infile.read() 
    counters={} 
    party='1234' 
    party_names = {1:'Independent', 2:'Republican', 3:'Democrat', 4:'Not known'} 
    wordList = content.split() 
    for i in wordList: 
     if i in party: 
      if i in counters: 
       counters[i]+=1 
      else: 
       counters[i]=1 
    for i in counters:    
     print('{:2} {}'.format(party_names[i], counters[i])) 
+0

文件的內容是這樣的希拉里·克林頓3 比爾·克林頓3 傑布·布什2 泰德·克魯斯2 唐納德·特朗普4 伯尼·桑德斯1 巴拉克奧巴馬3 克里斯·克里斯蒂2 希拉里·克林頓3 比爾·克林頓3 傑布布什2 泰德·克魯斯2 唐納德·特朗普4 伯尼·桑德斯1 巴拉克奧巴馬3 克里斯·克里斯蒂2 希拉里·克林頓3 比爾·克林頓3 傑布·布什2 泰德·克魯斯2 唐納德特朗普4 伯尼桑德斯1但他們都在不同的線路上 –

0

你忘了關閉open()這是許多原因使用with塊一個。不管怎麼說,我假設這是輸入文件的樣式:

克林頓3
克魯茲2
桑德斯3
特朗普2
Dutter 1

你想要的輸出成爲:

共和黨人2
民主黨人IC 2
獨立1

如果這是不正確的,那麼這個功能應該被改變,以適應正是你想要的。

from collections import defaultdict 

def getCandidates(infile): 
    parties = {1: "Independent", 2: "Republican", 3: "Democratic", 4: "Unknown"} 
    candidates = defaultdict(int) 
    with open(infile, "r") as fin: 
     for line in fin: # assuming only 2 columns and the last column is the number 
      candidates[parties[int(line.split()[-1])]] += 1 
    for party, count in candidates.items(): #.iteritems() in python 2.7 
     print("{} {}".format(party, count)) 

getCandidates("test.txt")