2016-11-14 1 views
0

私は、国が辞書に現れる回数を数え、一番現れた国を返します。 1つ以上の国が最も多く現れれば、それは国のリストを返すべきです。Pythonは辞書の国を数えています

例辞書:フランス、イタリア、そしてスペインは、すべて一度だけ、この辞書に表示されているので、それらの国の一つではなく、2または3が登場していた場合

{'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'] 

を返す必要があります関数がその国だけを返す回数。私が下にある現在のコードは、一番表示されるアーティストを検索しますが、いくつかの小さな変更が、最も表示される国を返すのに役立つと信じています。誰にどのようにこれを行うにはアドバイスをしていますか?助けてくれてありがとう

コード:

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

ありがとうございますカウンターをインポートせずにこれを行う方法?私はこの問題を明確にするべきだったが、私のコードは輸入に依存しない – 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

申し訳ありませんが、私は恣意的な制限付きの質問には答えません。コレクションモジュールはコアライブラリなので、インポートして使用しない理由はありません。 – wim

+0

@ warrior4223 _ "私のコードはシンプルで輸入に頼らなくてはなりません**" _ - どういう意味ですか?あなたのコードを簡単にすることの一部は、輸入に依存しています。インポートは、特定の機能/クラスが必要になるたびに、「ホイールを再開発する」ことからあなたを救います。 –

関連する問題