2016-11-14 85 views
0

我正在寫一個函數來計算一個國家出現在字典中的次數,並返回出現次數最多的國家。如果多於一個國家出現的話,那麼它應該返回一個國家名單。Python在字典中計數國家

例詞典:

{'Leonardo da Vinci': [("Portrait of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'), ('The Last 
    Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')], 'Pablo Picasso': [('Guernica', 1937, 
    349.0, 776.0, 'oil paint', 'Spain')]} 

自法國,意大利和西班牙都只能在這本字典中出現一次函數應該返回

countries_appeared_most(dictionary1()) 

['France', 'Italy', 'Spain'] 

如果這些國家的一人,而不是出現2或3次功能將返回該國家。我現在用下面的代碼搜索出現最多的藝術家,但我相信一些小小的變化可以幫助我返回出現最多的國家。有沒有人有關於如何做到這一點的建議?感謝您的幫助

代碼:

def countries_appeared_most(db): 
    if not db: 
      return None 
    maxcount = max(len(v) for v in db.values()) 
    themax = [k for k, v in db.items() if len(v) == maxcount] 
    themax.sort() 
    return themax 

回答

3
​​
+0

Thanks are there一種不需要導入Counter的方法呢?我應該在問題中明確說明這一點,但我的代碼不能依賴進口 – warrior4223

+0

@ warrior4223編輯。 –

+0

謝謝,我很感激。我得到錯誤計數器未定義我會嘗試將名稱更改爲別的 – warrior4223

1

拼合值來獲得國家的名單:

>>> [x[-1] for X in d.values() for x in X] 
['Spain', 'France', 'Italy'] 

而一個Counter可以直接給你最頻繁的:

>>> from collections import Counter 
>>> countries = [x[-1] for X in d.values() for x in X] 
>>> Counter(countries).most_common() 
[('Italy', 1), ('Spain', 1), ('France', 1)] 
+0

有沒有辦法做到這一點沒有反擊?對不起,我應該提到這個問題,但我的代碼需要簡單,不依賴進口 – warrior4223

+0

對不起,但我不回答任何限制的問題。 collections模塊是一個核心庫,所以沒有理由不導入和使用它。 – wim

+0

@ warrior4223 _「我的代碼需要**簡單,不依賴進口**」_ - 你是什麼意思?部分代碼簡單_is_依賴於導入。每次您需要某個功能/課程時,進口可以幫助您避免「重新發明輪子」。 –