我有两个以用户名作为键的字典。我如何合并它们以使键保持不变并将两个值都分配给键?

I have two dictionaries with username as keys. How can I merge them so that the key remains the same and the both the values are assigned to the key?

info_dict = {'breee': 9, 'ac': 3, 'mcintosh': 4, 'jackowens': 4, 'mdouglas': 5, 'oren': 9, 'xlg': 6, 'ahmed.miller': 6, 'blossom': 11, 'bpacheco': 3, 'enim.non': 5, 'rr.robinson': 1, 'flavia': 6, 'sri': 3, 'nonummy': 5, 'montanap': 6, 'mai.hendrix': 6, 'kirknixon': 2, 'noel': 5, 'britanni': 1}

error_dict = {'mdouglas': 2, 'noel': 10, 'blossom': 3, 'rr.robinson': 3, 'breee': 1, 'nonummy': 3, 'ahmed.miller': 3, 'jackowens': 4, 'ac': 4, 'kirknixon': 4, 'sri': 4, 'enim.non': 4, 'mcintosh': 7, 'oren': 3, 'britanni': 1}

我有两本以用户名作为键的字典。我如何合并它们以使键保持不变并将两个值都分配给键?如果键不存在于任何一个字典中,它应该分配值 0。实际上我需要从上面的字典中创建一个 CSV 文件,格式如下。 "USERNAME"、"INFO"、"ERROR"。任何帮助表示赞赏。不得添加值。

执行此操作的最简单方法是获取两个词典中所有键的列表并检索这些值。在这种情况下,我假设生成的字典使得每个名称都是字典中的一个键,每个值都是两个键信息和错误及其各自值的字典(如果不存在则为 0)。

无论如何,代码相同:

info_dict = {'breee': 9, 'ac': 3, 'mcintosh': 4, 'jackowens': 4, 'mdouglas': 5, 'oren': 9, 'xlg': 6, 'ahmed.miller': 6, 'blossom': 11, 'bpacheco': 3, 'enim.non': 5, 'rr.robinson': 1, 'flavia': 6, 'sri': 3, 'nonummy': 5, 'montanap': 6, 'mai.hendrix': 6, 'kirknixon': 2, 'noel': 5, 'britanni': 1}

error_dict = {'mdouglas': 2, 'noel': 10, 'blossom': 3, 'rr.robinson': 3, 'breee': 1, 'nonummy': 3, 'ahmed.miller': 3, 'jackowens': 4, 'ac': 4, 'kirknixon': 4, 'sri': 4, 'enim.non': 4, 'mcintosh': 7, 'oren': 3, 'britanni': 1}

result_dict = {}

for name in set(list(info_dict.keys())+list(error_dict.keys())):
    result_dict[name] = {
        "info": info_dict.get(name, 0),
        "error": info_dict.get(name, 0)
        }

print(result_dict)

是这样的吗?

info_dict = {'breee': 9, 'ac': 3, 'mcintosh': 4, 'jackowens': 4, 'mdouglas': 5, 'oren': 9, 'xlg': 6, 'ahmed.miller': 6, 'blossom': 11, 'bpacheco': 3, 'enim.non': 5, 'rr.robinson': 1, 'flavia': 6, 'sri': 3, 'nonummy': 5, 'montanap': 6, 'mai.hendrix': 6, 'kirknixon': 2, 'noel': 5, 'britanni': 1}
error_dict = {'mdouglas': 2, 'noel': 10, 'blossom': 3, 'rr.robinson': 3, 'breee': 1, 'nonummy': 3, 'ahmed.miller': 3, 'jackowens': 4, 'ac': 4, 'kirknixon': 4, 'sri': 4, 'enim.non': 4, 'mcintosh': 7, 'oren': 3, 'britanni': 1}

new_dict = {key: [info_dict.get(key, 0), error_dict.get(key, 0)]
            for key in set(info_dict.keys()).intersection(error_dict.keys())}

print(new_dict)

产生

{'kirknixon': [2, 4], 'rr.robinson': [1, 3], 'ac': [3, 4], 
'jackowens': [4, 4], 'mdouglas': [5, 2], 'mcintosh': [4, 7], 
'blossom': [11, 3], 'breee': [9, 1], 'sri': [3, 4], 
'enim.non': [5, 4], 'britanni': [1, 1], 'ahmed.miller': [6, 3], 
'noel': [5, 10], 'oren': [9, 3], 'nonummy': [5, 3]}

类似于:

info_dict = {'breee': 9, 'ac': 3, 'mcintosh': 4, 'jackowens': 4, 'mdouglas': 5, 'oren': 9, 'xlg': 6, 'ahmed.miller': 6, 'blossom': 11, 'bpacheco': 3, 'enim.non': 5, 'rr.robinson': 1, 'flavia': 6, 'sri': 3, 'nonummy': 5, 'montanap': 6, 'mai.hendrix': 6, 'kirknixon': 2, 'noel': 5, 'britanni': 1}

error_dict = {'mdouglas': 2, 'noel': 10, 'blossom': 3, 'rr.robinson': 3, 'breee': 1, 'nonummy': 3, 'ahmed.miller': 3, 'jackowens': 4, 'ac': 4, 'kirknixon': 4, 'sri': 4, 'enim.non': 4, 'mcintosh': 7, 'oren': 3, 'britanni': 1}

users = dict()
for user in info_dict.keys():
    if user in error_dict:
        users[user] = {'info':info_dict[user],'error':error_dict[user]}
    else:
        users[user] = {'info':info_dict[user],'error':0}

for user in  error_dict.keys():
    if user in users:
        continue
    users[user] = {'info':0,'error':error_dict[user]}

print (users)
info_dict = {'breee': 9, 'ac': 3, 'mcintosh': 4, 'jackowens': 4, 'mdouglas': 5, 'oren': 9, 'xlg': 6, 'ahmed.miller': 6, 'blossom': 11, 'bpacheco': 3, 'enim.non': 5, 'rr.robinson': 1, 'flavia': 6, 'sri': 3, 'nonummy': 5, 'montanap': 6, 'mai.hendrix': 6, 'kirknixon': 2, 'noel': 5, 'britanni': 1}
error_dict = {'mdouglas': 2, 'noel': 10, 'blossom': 3, 'rr.robinson': 3, 'breee': 1, 'nonummy': 3, 'ahmed.miller': 3, 'jackowens': 4, 'ac': 4, 'kirknixon': 4, 'sri': 4, 'enim.non': 4, 'mcintosh': 7, 'oren': 3, 'britanni': 1}

from csv import DictWriter

with open('output.csv', 'w') as f:
    fields = ['USERNAME', 'INFO', 'ERROR']
    writer = DictWriter(f, fields)
    writer.writeheader()
    all_users = list(info_dict.keys())
    all_users.extend(error_dict.keys())
    for user in sorted(set(all_users)):
        writer.writerow({
            'USERNAME': user,
            'INFO': info_dict.get(user, 0),
            'ERROR': error_dict.get(user, 0)
        })

这是一个创建列表列表作为输出并使用 pandas 按您的要求导出 csv 的版本。

import pandas as pd

info_dict = {'breee': 9, 'ac': 3, 'mcintosh': 4, 'jackowens': 4, 'mdouglas': 5, 'oren': 9, 'xlg': 6, 'ahmed.miller': 6, 'blossom': 11, 'bpacheco': 3, 'enim.non': 5, 'rr.robinson': 1, 'flavia': 6, 'sri': 3, 'nonummy': 5, 'montanap': 6, 'mai.hendrix': 6, 'kirknixon': 2, 'noel': 5, 'britanni': 1}
error_dict = {'mdouglas': 2, 'noel': 10, 'blossom': 3, 'rr.robinson': 3, 'breee': 1, 'nonummy': 3, 'ahmed.miller': 3, 'jackowens': 4, 'ac': 4, 'kirknixon': 4, 'sri': 4, 'enim.non': 4, 'mcintosh': 7, 'oren': 3, 'britanni': 1}

every_name.sort()

output = []
for name in set(list(info_dict.keys())+list(error_dict.keys())):
    info = info_dict.get(name,0)
    error = error_dict.get(name,0)

    output.append([name, info, error])

df = pd.DataFrame.from_records(output, columns=["username", "info", "errors"])
df.to_csv('output.csv')