3

私は持っている、

dict1={a:1, b:2, c:3}
dict2={a:3, c:7}

dict1 にあるキーのうち、dict2 にないキーを見つけたい。私もです

diff_as_set = set(dict1.keys()) - set (dict2.keys())

これは私に与えます:b

ただし、dict 2 にないすべてのキーの dict1 からのすべてのキー値マッピングを含む辞書が必要なので、次のようにします。

diff_as_dict = {k:v for k,v in dict1 if k in diff_as_set}

私は得る:

diff_as_dict = {k:v for k, v in dict1 if k in diff_as_set}
ValueError: too many values to unpack (expected 2)

何か案は?

4

3 に答える 3

3

dict をループすると、キーのみが提供されます。次を使用する必要があります。

diff_as_dict = {k:v for k, v in dict1.iteritems() if k in diff_as_set}
                                      ^^^^^^^^^^^

または.items()Python 3.xに使用

于 2013-02-19T22:39:09.590 に答える
2

辞書全体を調べてセットに一致するものを選択する代わりに、セットを反復するだけです。

diff_as_dict = {k:dict1[k] for k in diff_as_set}

例:

>>> dict1={'a':1, 'b':2, 'c':3}
>>> dict2={'a':3, 'c':7}
>>> diff_as_set = set(dict1.keys()) - set (dict2.keys())
>>> diff_as_set
set(['b'])
>>> diff_as_dict = {k:dict1[k] for k in diff_as_set}
>>> diff_as_dict
{'b': 2}
于 2013-02-19T22:43:28.240 に答える
1

.iteritems()次の部分がありません。

dict1 = {'a':1, 'b':2, 'c':3}
dict2 = {'a':3, 'c':7}
newdict = {k : v for k,v in dict1.iteritems() if not(k in dict2)}

この後、newdictは に等しくなり{'b': 2}ます。これにより、すべてが一度に実行されます。

于 2013-02-19T22:41:44.473 に答える