Python:通过key,value比较两个相同的字典
Python: Compare two identical dictionaries by key, value
我想比较两个字典的长度以及每个字典中的每个键值对。我还需要能够在查找的时候没有匹配的情况下打印出来。
我当前的代码似乎传递了长度标准,但在尝试匹配元素时失败了:
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]]}
错误似乎是在 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]
您需要 or
,而不是 and
。如果它不在 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])
对于 model_dict
中的每个键,您正在检查是否在 server_dict
中找不到相同的键,这本身就足够了。你在 and
之后所做的事情完全没有必要,也不正确,因为你试图将 model_dict
中的键值与 [=13= 中不存在的键值相匹配].
只需这样做:
{x: model_dict(x) for x in model_dict if x not in server_dict}
如果要检查每个键和值,可以使用 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
我想比较两个字典的长度以及每个字典中的每个键值对。我还需要能够在查找的时候没有匹配的情况下打印出来。
我当前的代码似乎传递了长度标准,但在尝试匹配元素时失败了:
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]]}
错误似乎是在 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]
您需要 or
,而不是 and
。如果它不在 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])
对于 model_dict
中的每个键,您正在检查是否在 server_dict
中找不到相同的键,这本身就足够了。你在 and
之后所做的事情完全没有必要,也不正确,因为你试图将 model_dict
中的键值与 [=13= 中不存在的键值相匹配].
只需这样做:
{x: model_dict(x) for x in model_dict if x not in server_dict}
如果要检查每个键和值,可以使用 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