比较Python字典
我写了两本字典。每个查询都基于同一数据库的不同查询。每个字典中都有一个键和数据库中的四个字段。我想找到在中的所有dict_x行都在dict_y中比较Python字典,python,dictionary,Python,Dictionary,我写了两本字典。每个查询都基于同一数据库的不同查询。每个字典中都有一个键和数据库中的四个字段。我想找到在中的所有dict_x行都在dict_y中 for row in dict_x: if dict_y.values() not in dict_x.values(): del dict_x[row] print 'Length dict_x', len(dict_x) 这将返回错误 TypeError: 'type' object does not support
for row in dict_x:
if dict_y.values() not in dict_x.values():
del dict_x[row]
print 'Length dict_x', len(dict_x)
这将返回错误
TypeError: 'type' object does not support item deletion
解决这个问题的步骤是
dict_x = {v: k for k, v in dict_x.items()}
dict_y = {v: k for k, v in dict_y.items()}
for key in dict_x.keys() & dict_y.keys():
print(key, dict_x[key])
print(key, dict_y[key])
下面是python 3中的dict理解等价物
result_set = {key: dict_x[key] for key in dict_x.keys() & dict_y.keys() if dict_x[key] == dict_y[key]}
只要数组中的元素总是以相同的顺序排列,这就可以工作
dict_x = {'hi': ['hello', 'hi'], 'bye': ['good bye', 'bye']}
dict_y = {'hi': ['hello', 'hi']}
dict_z = dict()
for key, row in dict_x.items():
if row in dict_y.values():
dict_z[key] = row
print(dict_z)
如果元素顺序不同,则必须执行以下操作:
dict_x = {'hi': ['hi', 'hello'], 'bye': ['good bye', 'bye']}
dict_y = {'hi': ['hello', 'hi']}
dict_z = dict()
for x_key, x_row in dict_x.items():
for y_key, y_row in dict_y.items():
if set(x_row).intersection(y_row):
dict_z[x_key] = y_row
print(dict_z)
这可能会有所帮助,如果dict相等,则返回False,否则返回true。我知道它的另一个方向
def compare_dict(
dict_1: Dict[Any, Any], dict_2: Dict[Any, Any]
):
new_key = any([False if key in dict_1 else True for key in dict_2])
delete_key = any(
[False if key in dict_2 else True for key in dict_1]
)
if new_key or delete_key:
return True
else:
values_mismatch_flag = any(
[
True if v != dict_1[k] else False
for k, v in dict_2.items()
]
)
if values_mismatch_flag:
return True
return False
你说的“排”是什么意思?字典没有行。它们有键和值。此外,您正在将
dict_y.values()
与dict_x.values()
进行比较。这是在每次迭代时比较整个字典的值-当然不是您想要的行我指的是字典项-我使用了单词row,因为字典是由SQL查询形成的。字典的大小在迭代过程中不会改变吗?或者我是否遗漏了什么?如果dict\x
的键/行的值在dict_y
然后要从dict_x
中删除键
?如果键不同,这会忽略吗?此答案有问题。如果列有重复的值怎么办?我认为这不起作用,因为根据我用来形成字典的查询,这些项应该有不同的键。我需要找出哪些项具有相同的值,而不管它们的键是什么。如果有一个项目的值在一个字典中不存在,我想删除它们。你的值是元组还是列表?如果你在同一个表中有一行重复的值怎么办?我只是想直接从字典中提取它们,所以我想答案是两者都不是?也许这是我错过的一步…你怎么拉他们?您可以在其中一行上键入(dict[row])以进行检查。
def compare_dict(
dict_1: Dict[Any, Any], dict_2: Dict[Any, Any]
):
new_key = any([False if key in dict_1 else True for key in dict_2])
delete_key = any(
[False if key in dict_2 else True for key in dict_1]
)
if new_key or delete_key:
return True
else:
values_mismatch_flag = any(
[
True if v != dict_1[k] else False
for k, v in dict_2.items()
]
)
if values_mismatch_flag:
return True
return False