2

私は1つの口述を持っていて、さらに3つの口述と比較したいです。キーが 3 つの辞書のいずれにも存在しない場合、そのキーと値のペアを使用して新しい辞書を作成します。また、キーと値の両方が 3 つの辞書のいずれかに一致する場合、およびキーが存在するが値が異なる場合はスキップします次に、もう1つの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}

辞書aをb、c、およびdと比較した後。結果は p_dict = {'d':4}q_dict = {'a':1,'b':2}

複数の for ループを考えていますが、dict a と b を比較した後にさらに 2 つの dict が作成され、プロセスが複雑になります。誰かがより良い考えを持っていますか?

4

2 に答える 2

2

Python3.3のソリューションは次のとおりです。これはPython2.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}

これは、dictの値がどれもでないと想定していますNone

于 2012-10-03T17:54:08.100 に答える