0
data1=[{'aa': None, 'bb': 'dffg', 'cc': '0', 'dd': '1234', 'ee': None}, 
{'aa': 'cdfg', 'bb': None, 'cc': '0', 'dd': 'sc12', 'ee': 'edft'},
{'aa': 'bvkjdi', 'bb': 'hdjd', 'cc': '0', 'dd': None, 'ee': None},
{'aa': None, 'bb': None, 'cc': '0', 'dd': '123dg', 'ee': 'hddk'}]


data2={'aa': ('','cdfg', 'bvkjdi', ''), 'bb': ('dffg','', 'hdjd', ''),
'cc': ('0', '0', '0','0'), 'dd': ('1234', 'sc12', '','123dg'),
'ee': ('', 'edft', '','hddk') }

data1 はキー値を持つ多くの辞書のリストで、data2 はキー値を持つ辞書です。これら 2 つを比較する必要がありますが、形式が異なります。data1 の「aa」と「aa」を比較する簡単な方法を見つけ出す必要があります。 data2 、 data1 の 'bb' 値から data2 の 'bb' 値まで、残りのものについても同様です。これを比較するのを手伝ってください。

4

3 に答える 3

0

None = '' および 0 = '0' と仮定すると、これはあなたが望むものだと思います:

data1=[{'aa': None, 'bb': 'dffg', 'cc': 0, 'dd': '1234', 'ee': None}, 
{'aa': 'cdfg', 'bb': None, 'cc': 0, 'dd': 'sc12', 'ee': 'edft'},
{'aa': 'bvkjdi', 'bb': 'hdjd', 'cc': 0, 'dd': None, 'ee': None},
{'aa': None, 'bb': None, 'cc': 0, 'dd': '123dg', 'ee': 'hddk'}]


data2={'aa': ('','cdfg', 'bvkjdi', ''), 'bb': ('dffg','', 'hdjd', ''),
'cc': ('0', '0', '0','0'), 'dd': ('1234', 'sc12', '','123dg'),
'ee': ('', 'edft', '','hddk') }

results = {}
for key in data2:
    set1 = [x[key] for x in data1]
    set1 = [str(x) if x is not None else '' for x in set1]
    set2 = list(data2[key])

    results[key] = set1 == set2        
# results = {'aa': True, 'cc': True, 'dd': True, 'ee': True, 'bb': True}    
于 2013-07-18T12:21:38.420 に答える
0

辞書内包表記を使用して、次のdata1ように再構成できます。data2

>>> n = {k: tuple(d[k] for d in data1) for k in data2}
>>> n
{'aa': (None, 'cdfg', 'bvkjdi', None), 'cc': ('0', '0', '0', '0'), 
'dd': ('1234', 'sc12', None, '123dg'), 'ee': (None, 'edft', None, 'hddk'), 
'bb': ('dffg', None, 'hdjd', None)}

Noneを一致させたいので''、それらも変換できます。

>>> n = {k: tuple(d[k] if d[k] is not None else '' for d in data1) for k in data2}
>>> n
{'aa': ('', 'cdfg', 'bvkjdi', ''), 'cc': ('0', '0', '0', '0'), 
'dd': ('1234', 'sc12', '', '123dg'), 'ee': ('', 'edft', '', 'hddk'), 
'bb': ('dffg', '', 'hdjd', '')}

その後:

>>> n == data2
True

aaキーと値のペアのみを比較したい場合はbb、それらを引き出すことができます。

>>> keys_to_compare = {'aa', 'bb'}
>>> d1 = {k: tuple(d[k] if d[k] is not None else '' for d in data1) for k in keys_to_compare}
>>> d2 = {k: v for k,v in data2.iteritems() if k in keys_to_compare}
>>> d1 == d2
True

または、それらをその場で比較します。

>>> all(tuple(d[k] if d[k] is not None else '' for d in data1) == data2[k] for k in keys_to_compare)
True
于 2013-07-18T12:35:51.257 に答える