回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有两份包含字典的清单。我想比较一下这些词典中的某些字段。在</p>
<pre><code>current_list = [{"name": "Bill","address": "Home", "age": 23, "accesstime":11:14:01},
{"name": "Fred","address": "Home", "age": 26, "accesstime":11:57:43},
{"name": "Nora","address": "Home", "age": 33, "accesstime":11:24:14}]
backup_list = [{"name": "Bill","address": "Home", "age": 23, "accesstime":13:34:24},
{"name": "Fred","address": "Home", "age": 26, "accesstime":13:34:26},
{"name": "Nora","address": "Home", "age": 33, "accesstime":13:35:14}]
</code></pre>
<p>列表/字典的顺序应该相同,我只想比较某些键、值对。比如姓名、地址、年龄和忽略访问时间,但我目前所掌握的比较了每一个密钥/对。所以我只想比较一下</p>
^{pr2}$
<p>等等。在</p>
<pre><code>for x in current_list:
for y in backup_list:
for k, v in x.items():
for kk, vv in y.items():
if k == kk:
print("Match: {0}".format(kk))
break
elif k != kk:
print("No match: {0}".format(kk))
</code></pre>
<p>电流输出</p>
<pre><code>Match name with name
No Match address with name
Match address with address
No Match age with name
No Match age with address
Match age with age
No Match dateRegistered with name
No Match dateRegistered with address
No Match dateRegistered with age
Match dateRegistered with dateRegistered
</code></pre>
<p>首选输出</p>
<pre><code>Match name with name
Match address with address
Match age with age
</code></pre>
<p><strong>*由于需求变更,我的列表变成了Elementtree xml元素的列表*</strong></p>
<p>所以不是上面的列表,而是</p>
<pre><code>backup_list = ["<Element 'New' at 0x0000000002698C28>, <Element 'Update' at 0x0000000002698CC8>, <Element 'New' at 0x0000000002698CC8>"]
</code></pre>
<p>其中ElementTree是一个包含以下内容的xml元素:</p>
<pre><code>{"name": "Nora", "address": "Home", "age": 33, "dateRegistered": 20140812}"
</code></pre>
<p>因此,基于下面的答案,这似乎符合我目前的要求:</p>
<pre><code>value_to_compare = ["name", "address", "age"]
for i, elem in enumerate(current_list):
backup_dict = backup_list[i]
if elem.tag == "New":
for key in value_to_compare:
try:
print("Match {0} {1} == {2}:".format(key, backup_dict.attrib[key], elem.attrib[key]))
except KeyError:
print("key {} not found".format(key))
except:
raise
else:
continue
</code></pre>