use*_*494 2 python dictionary key
这是我到目前为止试图查看具有相同键的三个词典并添加其适当值的代码.如果没有密钥,我希望代码添加零.
#!/usr/bin/env python
import sys
from operator import itemgetter
import csv
import ast
from collections import defaultdict
super_dic={}
d1 = {'a':2, 'b':5, 'c':3, 'd':6}
d2 = {'a':3, 'c':3}
d3 = {'b':4, 'd':4}
for d in (d1, d2, d3):
for key, value in d.iteritems():
super_dic.setdefault(key, []).append(value)
print super_dic
Run Code Online (Sandbox Code Playgroud)
super_dic的输出:
{'a': [2, 3], 'c': [3, 3], 'b': [5, 4], 'd': [6, 4]}
Run Code Online (Sandbox Code Playgroud)
但是,我希望我的最终结果是:
{'a':[2, 3, 0], 'c':[3,3,0], 'b':[5,0,4],'d':[6,0,4]}
Run Code Online (Sandbox Code Playgroud)
价值观的顺序很重要
任何帮助/反馈都非常感谢.现在已经有一段时间了,所有尝试的方法都没有在最后建立正确的主词典.
*请注意这不是一个重复的问题,因为在Python中合并字典时提出的问题都忽略了如果关键项不存在则添加零的事实.*
更一般地说,假设您有一个名为的词典列表dicts.
>>> dicts = [d1, d2, d3]
>>> allkeys = set(x for d in dicts for x in d.keys())
>>> super_dic = {k:[d.get(k, 0) for d in dicts] for k in allkeys}
>>> super_dic
{'a': [2, 3, 0], 'c': [3, 3, 0], 'b': [5, 0, 4], 'd': [6, 0, 4]}
Run Code Online (Sandbox Code Playgroud)