如何在字典中生成值的有序线性组合?

2024-10-03 00:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本这样的词典:

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'

Tags: 字符串列表string字典顺序字母词典d1
1条回答
网友
1楼 · 发布于 2024-10-03 00:27:55

下面是一种使用^{}的方法:

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

一个相当模糊的基于^{}的方法:

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

相关问题 更多 >