4

私は 2 つの辞書を持っています。キー (および値) に重複があります。両方が構築されると、一方からキー、もう一方に存在する値を削除したいと考えています。この質問とAlex Martelliの答えに基づいて私が試した

from collections import defaultdict

some_dictionary  # a defaultdict(list)
other_dictionary # a defaultdict(list) has some duplicate k,v pairs

other_dictionary = defaultdict((key,other_dictionary[key]) for key in other_dictionary if key not in some_dictionary)

これを行うと、エラーが発生します

TypeError: first argument must be callable
4

2 に答える 2

4

これを試して:

other_dictionary = defaultdict(list, ((k, v) for k, v in other_dictionary.iteritems() if k not in some_dictionary))

デフォルト値を決定するために、 a は最初の引数としてcallabledefaultdictを受け取る必要があることに注意してください。あなたのコードでは、引数がありませんでした。list

それ以外は、アルゴリズムは本質的に正しいものでしたが、iteritems()上記のように、 を使用してもう少し簡潔に記述できます。

于 2013-07-26T15:45:29.197 に答える
0

反復項目を使用する

other_dictionary = defaultdict(list, ((key,values) for key, values in other_dictionary.iteritems() if key not in some_dictionary))
于 2013-07-26T15:46:29.090 に答える