比较Python字典

时间:2019-01-21 17:21:01

标签: python dictionary

我创建了两个字典。每个都基于相同数据库的不同查询。每个字典中都有一个键和数据库中的四个字段。我想在dict_y中找到所有的dict_x行。

 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

4 个答案:

答案 0 :(得分:0)

解决问题的步骤是

  
      
  1. 反转字典的键值对
  2.   
  3. 确定常用的相交键
  4.   
  5. 浏览各个键并检查其值是否匹配
  6.   

代码如下所示

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]}

答案 1 :(得分:0)

>>> dict_a = {'a':[1,1,2,3]}
>>> dict_b = {'b':[1,2]}
>>> for a_key, b_key in zip(dict_a.keys(), dict_b.keys()):
...     print [i for i in dict_a[a_key] if i in set(dict_b[b_key])]
... 
[1, 1, 2]

答案 2 :(得分:0)

这将起作用,只要数组中的元素始终保持相同顺序即可。

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)

答案 3 :(得分:0)

这可能会有所帮助,如果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
相关问题