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

标签 python list dictionary concatenation

我有一个像这样设置的字典:

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'

最佳答案

这是使用 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']

关于python - 如何在字典中生成值的有序线性组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588422/

相关文章:

python - 如何使用 python 从 Azure 资源组中删除特定资源

Python:在连接时将数据发送到套接字

python - 使用 PyBabel 以编程方式提取消息

python - 将大型 csv 文件从 NodeJS 发送到 python

python - Python中有 'multimap'实现吗?

python - 如何仅给出长度递归地构建列表?

java - 基元数组的最简单列表包装器

python - 如何将数据框行分组到 Pandas groupby 中的列表中

python - 使用 python 在文本文件中写入字典列表

Python - 用空字典/数组替换空值