python辞書があります
d = {1: 6, 2: 1, 3: 1, 4: 9, 5: 9, 6: 1}
上記の辞書の値は一意ではないためです。一意の値のすべてのキーをリストとしてグループ化し、次のように新しい辞書を作成します。
v = {6:[1], 1:[2, 3, 6], 9: [4, 5]}
新しい辞書vのキーをソートする必要があることに注意してください。この辞書の作成を視覚化し、実装するのは難しいと感じています。簡単で効率的な方法を教えてください。
_collections.defaultdict
_ を使用して簡単に:
_from collections import defaultdict
v = defaultdict(list)
for key, value in sorted(d.iteritems()):
v[value].append(key)
_
しかし、沼地の標準dict
でもできます:
_v = {}
for key, value in sorted(d.iteritems()):
v.setdefault(value, []).append(key)
_
Python 3)では、代わりにsorted(d.items())
を使用します。
実際に1日の終わりにdict
が必要ない場合は、itertools.groupby
を使用できます。
from itertools import groupby
from operator import itemgetter
for k,v in groupby( sorted(d.items(),key=itemgetter(1)), itemgetter(1) ):
print k,list(map(itemgetter(0),v))
もちろん、あなたが本当にしたいなら、これを使って辞書を作成することができます:
{k:list(map(itemgetter(0),v)) for k,v in groupby( sorted(d.items(),key=itemgetter(1)), itemgetter(1) )}
しかし、その時点で、Martijnのdefaultdictソリューションを使用した方がよいでしょう。