2

我有一个字典,想与另外 3 个字典进行比较。如果 3 个 dict 中的任何一个中都不存在键,则使用该键、值对创建一个新的 dict,此外,如果键和值在 3 个 dict 中的任何一个中都匹配,并且如果键存在但值不同,则跳过然后再创建一个字典。

a={'a':1,'b':2,'c':3,'d':4}
b={'a':10,'b':20}
c={'p':100,'q':200,'c':300}
d={'a':1000,'x':2000,'c':3}

在将 dict a 与 b、c 和 d 进行比较之后。结果应该是 p_dict = {'d':4}q_dict = {'a':1,'b':2}

我正在考虑多个 for 循环,但在比较 dict a 和 b 之后会再创建 2 个 dict,这会使过程复杂化。有人有更好的主意吗?

4

2 回答 2

2

这是 Python 3.3 的解决方案。这也适用于 Python 2.7,但我会使用.iteritems()而不是.items()

>>> a = {"a":1, "b":2, "c":3, "d":4}
>>> b = {"a":10, "b":20}
>>> c = {"p":100, "q":200, "c":300}
>>> d = {"a":1000, "x":2000, "c":3}
>>> p_dict = {k:v for k,v in a.items() 
...               if not any(k in dicts for dicts in (b,c,d))}
>>> p_dict
{'d': 4}
>>> q_dict = {k:v for k,v in a.items()
...               if any(k in dicts for dicts in (b,c,d))
...               and not any(dicts.get(k)==v for dicts in (b,c,d))}
>>> q_dict
{'a': 1, 'b': 2}

这假设您的 dicts 中没有任何值是None.

于 2012-10-03T17:54:08.100 回答
2

这是基于 Tim Pietzcer 方法的 2.x(不使用字典理解)解决方案:

In [680]: dicts=[b,c,d]

In [681]: p_dict=dict([(k,v) for k,v in a.iteritems()
                      if not any(k in di for di in dicts)])

In [682]: p_dict
Out[682]: {'d': '4'}

In [683]: q_dict=dict([(k,v) for k,v in a.iteritems() 
                      if any(k in di for di in dicts)
                      and not any(di.get(k)==v for di in dicts) ])

In [684]: q_dict
Out[684]: {'a': '1', 'b': '2'}
于 2012-10-03T18:36:08.890 回答