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

但是,我想要一个字典,其中包含 dict1 中所有不在 dict 2 中的键的键值映射,所以我这样做:

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 回答