【发布时间】:2018-09-19 05:10:28
【问题描述】:
我在与列表中的嵌套字典进行比较时遇到问题,我试图仅显示值更改的键的数据,以及它们之间的差异。我已经尝试过了(示例已简化,我的比较数据中可以有不同级别的嵌套):
old = [{"poker":{"John":{"Wins": 4, "Losses": 3}, "Jack": {"Wins": 6, "Losses": 1}}},
{"Blackjack":{"Bill": {"Wins": 4, "Losses": 3}, "John": {"Wins": 7, "Losses": 0}}}]
new = [{"poker":{"John":{"Wins": 6, "Losses": 3}, "Jack": {"Wins": 6, "Losses": 5}, "Bill": {"Wins": 3, "Losses": 0}}},
{"Blackjack":{"Bill": {"Wins": 4, "Losses": 3}, "John": {"Wins": 7, "Losses": 0}, "Jack":
{"Wins": 1, "Losses": 3}}}]
def nested_compare(new, old):
for key in new:
try:
if type(new(key)) == dict:
nested_compare(old[key], new[key])
except:
pass
oldkeys = set(old.keys())
newkeys = set(new.keys())
samekeys = newkeys.intersection(oldkeys)
unchanged = set(k for k in samekeys if old[k] == new[k])
for key in list(unchanged):
try:
del new[key]
del old[key]
except KeyError:
pass
return new, old
final = []
x = 0
for entry in new:
new_data, old_data = nested_compare(entry, old[x])
x += 1
final.append(new_data)
print final
但是,当我运行它时,我仍然看到相同的键:
[{'poker': {'John': {'Wins': 6, 'Losses': 1}, 'Jack': {'Wins': 6, “损失”:5},“比尔”:{“赢”:3,“损失”:0}}},{“二十一点”: {'Bill': {'Wins': 4, 'Losses': 3}, 'John': {'Wins': 7, 'Losses': 0}, “杰克”:{“胜利”:1,“失败”:3}}}]
以及我期望看到的:
[{"poker":{"John":{"Wins": 6}, "Jack": {"Losses": 5}, "Bill": {"Wins": 3,“损失”:0}}},{“二十一点”:{“杰克”:{“胜利”:1,“损失”:3}}}]
如果我能看到新旧之间的数量差异,那就太好了,但我只想只显示发生了什么变化。
【问题讨论】:
标签: python dictionary nested comparison