Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较python中具有不同键的两个字典_Python - Fatal编程技术网

比较python中具有不同键的两个字典

比较python中具有不同键的两个字典,python,Python,如何比较两个键不同的词典,如下面的词典 dictionary={"name":"abc","age":23,"male":True} new_dictionary={"my_name":"abc","my_age":23,"male":1} 比较示例中的两个词典时,比较结果应返回true >>> dictionary={"name":"abc","age":23,"male":True} >>> new_dictionary={"my_name":"abc"

如何比较两个键不同的词典,如下面的词典

dictionary={"name":"abc","age":23,"male":True}
new_dictionary={"my_name":"abc","my_age":23,"male":1}
比较示例中的两个词典时,比较结果应返回
true

>>> dictionary={"name":"abc","age":23,"male":True}
>>> new_dictionary={"my_name":"abc","my_age":23,"male":1}
>>> key_map = {"name": "my_name", "age": "my_age"}
>>> all(new_dictionary[key_map.get(k, k)] == v for k, v in dictionary.items())
True
或者,如果您只是想确保值相同而无需任何键检查:

>>> set(dictionary.values()) == set(new_dictionary.values())
True
编辑:正如塔德克在评论中指出的那样,
sorted()
在这里使用比
set()
更安全


(是的,即使一个字典有
1
,而另一个字典有
True
),这仍然有效。

您需要定义比较的确切方式。如果您只想比较这些值,而不管这些值分配给哪个键,可以使用以下方法:

按值比较(忽略键) 根据您的最新需求,其中一个解决方案是:

>>> def compare(dict1, dict2):
    return sorted(dict1.values()) == sorted(dict2.values())

>>> compare({"name":"abc","age":23,"male":True},
    {"my_name":"abc","my_age":23,"male":1})
True
>>> compare({"name":"abc","age":23,"male":True},
    {"my_name":"abc","my_age":24,"male":1})
False

根据什么标准这些是相同的?您必须进行一些良好的ole逐项比较。向我们解释,您希望如何比较它们。您需要定义从旧键名到新键名的映射。但我注意到,您还将与“male”关联的值的类型从布尔值更改为整数,因此您可能还需要指定如何从一种类型转换为另一种类型。@user1018828:请更新您的问题;下面的答案都是在猜测你当时的意思。我最初也在考虑使用
set()
s,但我得出的结论是,
{a:1,b:1,c:2}
如果这样比较,将等于
{a:1,b:2,c:2}
。我想这不是它,因此我切换到对两个dict使用
sorted(dict.values())
比较。
dictionary={"name":"abc","age":23,"male":True}
new_dictionary={"my_name":"abc","my_age":23,"male":1}    
dict_alias = {"name":"my_name","age":"my_age","male":"male"}

def compare(dictionary,new_dictionary,dict_alias):
    same = True
    for key in dictionary.keys():
        if dictionary[key] == new_dictionary[dict_alias[key]]:
            continue
        else:
            same = False
            break
    return same