我有这样的字典设置:
d1 = {1:['A'],2:['B'],3:['C','D'],4:['E','F'],5:['G'],6:['A']}
我需要连接此字典中值的所有线性组合。但是,每个列表中字母的顺序很重要:仅应为顺序相同的字符串生成串联字符串,即应串联“ C”和“ E”,而不是“ D”和“ E”。例如,使用以上字典的结果应如下所示:
String 1 = 'ABCEGA'
String 2 = 'ABDFGA'
答案 0 :(得分:1)
这是使用itertools.zip_longest
的一种方法:
from itertools import zip_longest
z = list(map(list,(zip_longest(*d1.values()))))
# [['A', 'B', 'C', 'E', 'G', 'A'], [None, None, 'D', 'F', None, None]]
for ix_i, i in enumerate(z):
for ix_j, j in enumerate(i):
if not j:
z[ix_i][ix_j] = z[ix_i-1][ix_j]
list(map(''.join, z))
# ['ABCEGA', 'ABDFGA']
一种基于itertools
的模糊方法:
from itertools import zip_longest, accumulate
z = zip_longest(*d1.values())
out = [[*accumulate(i, lambda x, y: y or x)] for i in zip(*z)]
list(map(''.join, zip(*out)))
# ['ABCEGA', 'ABDFGA']