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

Python 我有两本以用户名为键的字典。如何合并它们,使键保持不变,并将两个值都指定给键?,python,python-3.x,csv,dictionary,export-to-csv,Python,Python 3.x,Csv,Dictionary,Export To Csv,我有两本以用户名为键的字典。如何合并它们,使键保持不变,并将两个值都指定给键?如果任何一个字典中都不存在该键,则应将其赋值为0。实际上,我需要从上面的字典中创建一个CSV文件,格式如下。 用户名,信息,错误。感谢您的帮助。不能添加值。最简单的方法是获取两个字典中所有键的列表并检索这些值。在本例中,我假设结果字典中的每个名称都是字典中的一个键,每个值都是两个键的dict info和error,如果它们各自的值不存在,则为0 无论如何,相同的代码: info_dict = {'breee': 9,

我有两本以用户名为键的字典。如何合并它们,使键保持不变,并将两个值都指定给键?如果任何一个字典中都不存在该键,则应将其赋值为0。实际上,我需要从上面的字典中创建一个CSV文件,格式如下。
用户名,信息,错误。感谢您的帮助。不能添加值。

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

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]}

下面是一个版本,它创建一个列表列表作为输出,并根据您的请求使用pandas导出csv

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

这回答了你的问题吗?谢谢你的投票。只是做了一个小的编辑,使关键点设置。请使用最新版本。非常感谢。你结束了我14小时的挣扎。哈哈。我是python新手,还在学习。非常感谢。我的一个问题用这个解决了,但我还没有弄清楚如何以USERNAME,INFO,ERROR的格式创建CSV文件。非常感谢您在这方面的帮助。
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)
        })
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')