2016-12-04 3 views
1

私はリスト内の値の出現回数を示す値の辞書を持っています。以前の辞書を値に基​​づいて別々の辞書に分割する新しい辞書を返すにはどうすればよいですか? 辞書の「ソート」は、キーの出現数によってどのように行われますか?

言い換えれば、私はこの辞書をソートする:この1へ

>>> a = {'A':2, 'B':3, 'C':4, 'D':2, 'E':3} 

を。

b = {2: {'A', 'D'}, 3: {'B', 'E'}, 4: {'C'}} 

どのように問題にアプローチしますか?

答えて

3
from collections import defaultdict 

a = {'A': 2, 'B': 3, 'C': 4, 'D': 2, 'E': 3} 

b = defaultdict(set) 
for k, v in a.items(): 
    b[v].add(k) 

これは、あなたが買ってあげるものです:あなたがb = dict(b)で、その後、通常の辞書にbに変換することができます

defaultdict(<class 'set'>, {2: {'D', 'A'}, 3: {'B', 'E'}, 4: {'C'}}) 

+1

「dict」に明示的に変換する必要はありません。それは普通の辞書のように振る舞います。 –

+0

@MoinuddinQuadri必ずしもそうではありません。たとえば、欠落しているキーにアクセスしようとすると、 'defaultdict'にエントリが追加されるので、後でそのキーが辞書に入っているかどうかを確認すると' True'を返します。 – fenceop

0

あなたは私のようなPythonの初心者であれば、あなたはおそらくたいこの

= { 'A' してみてください: '、2:2、 'B':3、 'C':4 'D' をE」:3}におけるキーの

B = {}

lst = [] 

new_key = a[key] 

if new_key not in b: 

    lst.append(key) 

    b[new_key] = lst 

else: 

    b[new_key].append(key) 

プリント(B)

これはPの可変性を使用あなたが望む結果を達成するためにython辞書。

関連する問題