比较两个字典的键。如果键匹配,则将这些键,值复制到python文件中

时间:2018-10-01 13:01:41

标签: python dictionary

我需要比较两个字典的键,如果键匹配,则将这些键的值复制到文件中。

这里的要求是我有两个文件,并且我想读取不是以#开头的所有键,并将其存储在两个字典中。然后比较两个字典键。

让我说我在dict1中有第一个文件密钥,在dict2中有第二个文件密钥,并且如果dict1,我想将dict2密钥与dict1密钥进行比较键与dict2键匹配,然后将匹配键的值从dict1复制到dict2。键值的顺序不应在文件中更改。

下面是我遵循的方法,但不符合我的要求。

with open(file1) as bl_file:
    content_bld_file = bl_file.readlines()
for i in content_bl_file:
    if '#' not in i:
        bl_d = {}
        bl_var1 = (i.split("="))
        if len(bl_var1)>1:
            bl_d[bl_var1[0]]=bl_var1[1]
        if len(bl_d) == 1:
            for k, v in bld_d.items():
                bl_file_keys = k
                print(bl_file_keys)

with open(file2) as tr_file:
    content_tr_file = tr_file.readlines()
for i in content_tr_file:
    if '#' not in i:
        tr_d = {}
        tr_var2 = (i.split("="))
        if len(tr_var2)>1:
            tr_d[tr_var2[0]]=tr_var2[1]
        if len(tr_d) == 1:
            for k,v in tr_d.items():
                tr_file_keys = k
                print(tr_file_keys)

因此从上面我可以在两个字典中读取和存储密钥,但无法进行比较。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

您需要找到键的交点。试试这个:

a = {1: 2, 3: 4, 5: 6}
b = {1: 5, 2: 6, 3: 7}
a_keys = set(a.keys())
b_keys = set(b.keys())
print(a_keys.intersection(b_keys))  // Prints {1, 3}

要查找一组中的键而不是另一组中的键,只需将它们相减即可:

new_keys = a_keys - b_keys

答案 1 :(得分:0)

您可以使用两个字典的键的交点的dict2的值来更新dict1

d1 = {1: 2, 3: 4}
d2 = {3: 5, 4: 3}
d2.update({k: d1[k] for k in d1.keys() & d2.keys()})

d2将变为:

{3: 4, 4: 3}