1

次のように辞書を作成したい -

{'a':[1, 2, 3, 4, 5], 'b':[1, 3, 5], 'c':[2, 3, 5]}

私が実装した方法は

mydict = dict()
letters = ['a', 'b', 'a', 'c', 'a'] 

#please mark the list has multiple occurence of a, 
#hence I would want to check if a key with 'a' exists. Please do not advise to make the list unique. 
for l in letters:
    if not mydict.get(l):
        mydict[l] =  <values from another place via some filter>
    else:
        mydict[l].append(<values from another dict>)

これを行うためのより良いアプローチはありますか?

4

3 に答える 3

2

m01 によって提供されるソリューションはクールですが、単純な dict オブジェクトでそれを行うことができることに言及する価値があると思います..

mydict = dict()
letters = ['a', 'b', 'a', 'c', 'a']

for l in letters:
    mydict.setdefault(l, []).append('1')

結果は同じはずです。サブクラスを使用する代わりに、デフォルトの辞書があります。それは本当にあなたが探しているものに依存します。私の推測では、私のソリューションの大きな問題は、不要な場合でも新しいリストが作成されることです。

defaultdictオブジェクトには、何かが不足している場合にのみ新しいオブジェクトを作成できるという利点があります。このソリューションには、特別なことを何もせずに単純な辞書であるという利点があります。

編集

考えてみると、setdefaulton aを使用するdefaultdictと期待どおりに機能することがわかりました。しかし、代わりに普通の古いものを使用する必要があると言うには、まだ十分ではありませんdictdictを持つことが重要な場合があります。簡単に言うと、 の無効なキーはdictを発生させKeyErrorます。Adefaultdictはデフォルト値を返します。

例として、KeyError をキャッチするか、パス全体をトラバースするたびに停止するトラバーサル アルゴリズムがあります。を使用するdefaultdictと、エラーが発生した場合に自分自身で KeyError を上げる必要があります。

于 2013-05-22T15:30:13.000 に答える