1

リスト内の複数の辞書の違いを取得する必要があります。私が持っているもの:

[{'WWW': '1.1.1.1', 'Dom': '1.1.1.1', 'SPF': None, 'MX': '1.1.1.1', 'PTR': 'reverse.dom.com'}, 
 {'WWW': '1.1.1.1', 'Dom': '1.1.1.1', 'SPF': None, 'MX': '1.1.1.1', 'PTR': 'reverse.dom.com'}, 
 {'WWW': '2.2.2.2', 'Dom': '2.2.2.2', 'SPF': None, 'MX': '2.2.2.2', 'PTR': 'reverse.dom.com'}, 
 {'WWW': '1.1.1.1', 'Dom': '1.1.1.1', 'SPF': None, 'MX': '1.1.1.1', 'PTR': 'reverse.dom.com'}]

しかし、その辞書から抽出する必要があります。次のようなものです。

list 2: [('WWW', '2.2.2.2'), ('Dom', '2.2.2.2'), ('MX', '2.2.2.2')]

すべての口述の違いだけです。これは、複数の DNS ゾーン間で設定ミスがあるかどうかを知る必要があるためです。

それで、どうすればそれを行うことができますか?

4

2 に答える 2

0

すべての辞書値がハッシュ可能であると仮定すると、 and を使用itertools.chaincollections.Counterます。

>>> lst = [{'WWW': '1.1.1.1', 'Dom': '1.1.1.1', 'SPF': None, 'MX': '1.1.1.1', 'PTR': 'reverse.dom.com'}, 
...  {'WWW': '1.1.1.1', 'Dom': '1.1.1.1', 'SPF': None, 'MX': '1.1.1.1', 'PTR': 'reverse.dom.com'}, 
...  {'WWW': '2.2.2.2', 'Dom': '2.2.2.2', 'SPF': None, 'MX': '2.2.2.2', 'PTR': 'reverse.dom.com'}, 
...  {'WWW': '1.1.1.1', 'Dom': '1.1.1.1', 'SPF': None, 'MX': '1.1.1.1', 'PTR': 'reverse.dom.com'}]
>>> c = Counter(chain.from_iterable(d.items() for d in lst))
>>> print([key for key,val in c.items() if val == 1])
[('WWW', '2.2.2.2'), ('MX', '2.2.2.2'), ('Dom', '2.2.2.2')]
于 2013-06-13T17:17:43.157 に答える