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

2024-06-09 19:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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文件,格式如下。 “用户名”、“信息”、“错误”。感谢您的帮助。不得添加这些值


Tags: 字典rrdictacnonahmedmillerrobinson
3条回答

最简单的方法是获取两个字典中所有键的列表并检索这些值。在本例中,我假设结果字典中的每个名称都是字典中的一个键,每个值都是两个键的dict 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}

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')

相关问题 更多 >