2016-09-06 12 views
1

に私のような辞書があります。Countは、ネストされた辞書パイソン

dict = { 
    "a": {"Azerbaijan": 20006.0, "Germany": 20016.571428571428}, 
    "b": {"Chad": 13000.0, "South Africa": 3000000.0}, 
    "c": {"Chad": 200061.0, "South Africa": 3000000.0} 
} 

をそして私は、それぞれユニークな国や値の出現回数の辞書を取得しようとしています。例えば

{"Chad": 2, "South Africa": 2,..}{"3000000": 2, "13000": 1,..}

私は動作しますが、非常にスマートではありません、それ以下のコードを使用しています実際の辞書が巨大であるため、長い反復サイクルせずにこれを行うには良い方法は、ありますか?

seencountries = {} 
seenvalues = {} 

for key, innerdict in dict.iteritems(): 
    for country, value in innerdict.iteritems(): 
     if value not in seenvalues.keys(): 
      seenvalues[value] = 0 
     seenvalues[value]+=1 
     if country not in seencountries.keys(): 
      seencountries[country] = 0 
     seencountries[country]+=1 

print seencountries 

print seenvalues 
+0

あなたの国では、*キー*ですか? Python辞書は順序付けされていないので、どの辞書を国のために使うべきかをどのように知っていますか? –

+0

見たことがない場合。私が正しく理解すれば、辞書にはユニークな値しか含まれていませんか? –

+0

これらには固有のキーが含まれています。しかし、キーの順序は任意です...またはあなたは国だけでなくすべてのキーを数えていますか?私はキーのためにかなり確信しています*これらのキーのどちらも国ではありません... –

答えて

4
from collections import Counter 
seen_countries = Counter() 
seen_values = Counter() 
for data in your_dicts.itervalues(): 
    seen_countries += Counter(data.keys()) 
    seen_values += Counter(data.values()) 
関連する問題