我可以比较不同顺序的两个词典的键吗?

DJF*_*DJF 2 python dictionary compare

我很抱歉这必须是使用词典的基本问题.我正在学习python,我的目标是比较两个词典并从两个相同的条目中恢复Key和Value条目.据我所知,字典中的顺序与列表中的顺序无关.但我采用了一个代码来比较我的词典,我只是想确保词典的顺序无关紧要.

我到目前为止编写的代码是:

def compare_dict(first,second): 
    with open('Common_hits_python.txt', 'w') as file: 
            for keyone in first: 
                for keytwo in second: 
                    if keytwo == keyone: 
                        if first[keyone] == second[keytwo]: 
                            file.write(keyone + "\t" + first[keyone] + "\n") 
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激.我为上面的代码中的冗余道歉.但是,如果有人能够确认以这种方式比较两个字典并不要求密钥处于相同的顺序就会很好.其他编写函数的方法也非常受欢迎.

Mar*_*ers 7

由于你遍历两个字典并比较所有组合,不,顺序无关紧要.最终,将一个字典中的每个键与另一个字典中的每个键进行比较.

但是,它不是测试匹配键的非常有效的方法.测试是否存在密钥非常简单keyone in second,无需遍历second此处的所有密钥.

更好的是,您可以使用集合交叉点:

for key, value in first.viewitems() & second.viewitems():
    # loops over all key - value pairs that match in both.
    file.write('{}\t{}\n'.format(key, value)) 
Run Code Online (Sandbox Code Playgroud)

这使用字典视图对象 ; 如果您使用的是Python 3,那么您可以使用first.items() & second.items()字典作为默认返回字典视图.

使用dict.viewitems()as set只有在值可以哈希时才有效,但是因为在写入我认为是的文件时你将值视为字符串.

如果您的值不可清除,则需要验证值是否匹配,但您仍然可以使用视图并仅交叉键:

for key in first.viewkeys() & second.viewkeys():
    # loops over all keys that match in both.
    if first[key] == second[key]:
        file.write('{}\t{}\n'.format(key, first[key])) 
Run Code Online (Sandbox Code Playgroud)

同样,在Python 3中,first.keys() & second.keys()通过键使用两个字典的交集.