我不确定我是否理解您对输出的期望,(“来自每个 defaultdict 的字符串共享相同的索引”?您的示例输出包含不共享相同索引的项目,例如 aga,g 在 dd2 key1 中有第二个位置)但是这个将为您提供包含所有三个 dicts 中具有相同键的项目的融合值的字典:
d1 = {1:['a','b'],2:['a','c'],3:['d','e']}
d2 = {1:['f','g','l'],2:['h','i'],4:['j','k','m']}
d3 = {1:['n','a'],3:['p','q'],5:['r','q']}
d4 = [d1,d2,d3]
new = {}
for i in d4:
for m in i:
try:
new[m].extend(i[m])
except:
new[m] = []
new[m].extend(i[m])
print new
{1: ['a', 'b', 'f', 'g', 'l', 'n', 'a'],
2: ['a', 'c', 'h', 'i'], 3: ['d', 'e', 'p', 'q'],
4: ['j', 'k', 'm'], 5: ['r', 'q']}
然后,如果需要,您可以制作另一个列表,其中包含这些列表中所有项目的组合。
from itertools import combinations
combs = []
#this is just for one key, but you can loop over list of dicts to do this for each dict
for m in combinations(new[1],3):
perms.append(m)
print combs
[('a', 'b', 'f'), ('a', 'b', 'g'), ('a', 'b', 'l'), ('a', 'b', 'n'), ('a', 'b', 'a'), ('a', 'f', 'g'), ('a', 'f', 'l'), ('a', 'f', 'n'), ('a', 'f', 'a'), ('a', 'g', 'l'), ('a', 'g', 'n'), ('a', 'g', 'a'), ('a', 'l', 'n'), ('a', 'l', 'a'), ('a', 'n', 'a'), ('b', 'f', 'g'), ('b', 'f', 'l'), ('b', 'f', 'n'), ('b', 'f', 'a'), ('b', 'g', 'l'), ('b', 'g', 'n'), ('b', 'g', 'a'), ('b', 'l', 'n'), ('b', 'l', 'a'), ('b', 'n', 'a'), ('f', 'g', 'l'), ('f', 'g', 'n'), ('f', 'g', 'a'), ('f', 'l', 'n'), ('f', 'l', 'a'), ('f', 'n', 'a'), ('g', 'l', 'n'), ('g', 'l', 'a'), ('g', 'n', 'a'), ('l', 'n', 'a')]
清单很长。