【问题标题】: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?我有两个以用户名作为键的字典。如何合并它们以使键保持不变并将两个值都分配给键?
【发布时间】:2020-08-31 11:31:43
【问题描述】:
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 文件,格式如下。 “用户名”、“信息”、“错误”。任何帮助表示赞赏。不得添加值。

【问题讨论】:

标签: python python-3.x csv dictionary export-to-csv


【解决方案1】:

最简单的方法是获取两个字典中所有键的列表并检索这些值。在这种情况下,我假设生成的字典使得每个名称都是字典中的一个键,每个值是两个键信息的字典,并且错误与它们各自的值(如果不存在,则为 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)

【讨论】:

  • 非常感谢。我的一个问题得到了解决,但我还没有弄清楚如何创建格式为(用户名、信息、错误)的 CSV 文件。非常感谢您在这方面的任何帮助。
【解决方案2】:

这样的?

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

【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案4】:
      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 新手,还在学习。
      【解决方案5】:

      这是一个创建列表列表作为输出的版本,并根据您的要求使用 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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        相关资源
        最近更新 更多