我有两个或多个字典,我喜欢将其合并为一个字典,同时保留与列表相同的键的多个值。我将无法共享原始代码,因此请通过以下示例为我提供帮助。
输入:
a= {'a':1, 'b': 2}
b= {'aa':4, 'b': 6}
c= {'aa':3, 'c': 8}
输出:
c= {'a':1,'aa':[3,4],'b': [2,6], 'c': 8}
答案 0 :(得分:1)
我建议您阅读defaultdict:它使您可以提供一种工厂方法来初始化缺少的键,即,如果查找但找不到键,则通过调用<script type="text/javascript">
function update() {
window.setInterval(function() {
var index = Math.floor(Math.random() * 10) + 1; // Generates random number from 1 to 10
document.querySelector("#ri-grid div:nth-child(1)").style.backgroundImage = "url(img/" + index + ".jpg)";
}, 10000);
}
update();
</script>
来创建一个值。看这个例子,它可能会使事情变得更清楚:
factory_method(missing_key)
这具有为值的单个出现创建一个元素列表的“缺点”,但也许您可以解决该问题。
答案 1 :(得分:0)
请在下面找到解决您的问题的方法。我希望这对您有用。
from collections import defaultdict
a = {'a':1, 'b': 2}
b = {'aa':4, 'b': 6}
c={'aa':3, 'c': 8}
dd = defaultdict(list)
for d in (a,b,c):
for key, value in d.items():
dd[key].append(value)
print(dd)
答案 2 :(得分:0)
使用defaultdict
自动创建一个带有空列表的字典条目。
要在单个循环中处理所有源词典,请使用itertools.chain
。
主循环只是将当前项目的值添加到下面的列表中 当前密钥。
如您所写,对于某些情况下,在某个键下仅一个项, 您必须生成一个工作词典(使用字典式理解), 限于值(列表)中仅包含一项的项目。 此项目的值应仅包含第一个(也是唯一)数字 从来源列表中。
然后使用此词典更新d
。
因此,整个脚本可能非常短,如下所示:
from collections import defaultdict
from itertools import chain
a = {'a':1, 'b': 2}
b = {'aa':4, 'b': 6}
c = {'aa':3, 'c': 8}
d = defaultdict(list)
for k, v in chain(a.items(), b.items(), c.items()):
d[k].append(v)
d.update({ k: v[0] for k, v in d.items() if len(v) == 1 })
如您所见,实际的处理代码仅包含在最后4行中。
如果打印d
,则结果为:
defaultdict(list, {'a': 1, 'b': [2, 6], 'aa': [4, 3], 'c': 8})