我想比较两个词典的长度以及每个词典中的每个键值对。我还需要能够在寻找时打印出来。
我当前的代码似乎传递了长度标准,但在尝试匹配元素时失败了:
assert_that(len(model_dict), len(server_dict))
for x in model_dict:
if x not in server_dict and model_dict[x] != server_dict[x]:
print(x, model_dict[x])
server_dict字典中一个条目的示例:
{2847001:[[[ - 94.8,28],[ - 95.4,28],[ - 96,28],[ - 96.5,28.1], [-96.667,28.133],[ - 97,28.2],[ - 97.6,28.3],[ - 98.3,28.4],[ - 98.9, 28.6],[ - 99.4,29],[ - 99.8,29.5],[ - 100,30],[ - 100.1,30.5],[ - 100.2,31]]]}
model_dict字典中一个条目的示例:
{2847001:[[ - 94.8,28],[ - 95.4,28],[ - 96,28],[ - 96.5,28.1], [-96.667,28.133],[ - 97,28.2],[ - 97.6,28.3],[ - 98.3,28.4],[ - 98.9, 28.6],[ - 99.4,29],[ - 99.8,29.5],[ - 100,30],[ - 100.1,30.5],[ - 100.2,31]]}
答案 0 :(得分:2)
错误似乎是在条件中使用and
:
x not in server_dict and model_dict[x] != server_dict[x]
如果第一个条件通过,第二个条件没有意义。请尝试or
:
x not in server_dict or model_dict[x] != server_dict[x]
答案 1 :(得分:1)
如果要检查每个键和值,可以使用dict.items和dict.get并使用默认值:
for k,v in model_dict.items():
if server_dict.get(k,object()) != v:
print(k,v)
如果你只是想要任何一个不同的密钥,你可以得到对称差异:
unique = model_dict.keys() ^ server_dict # viewkeys() python2
答案 2 :(得分:0)
您需要or
,而不是and
。如果它不在server_dict
,你不想在那里检查。
答案 3 :(得分:0)
你过度了,这就是错误。当你写这个
for x in model_dict:
if x not in server_dict and model_dict[x] != server_dict[x]:
print(x, model_dict[x])
对于model_dict
中的每个密钥,您需要检查server_dict
中是否找不到相同的密钥,这本身就足够了。在and
完全没有必要且不正确之后你正在做什么,因为你试图将model_dict
中的密钥值与非{0}匹配server_dict
中存在密钥的值。
这样做:
{x: model_dict(x) for x in model_dict if x not in server_dict}