给定输入字符串的所有可能的字典值组合.蟒蛇

O.r*_*rka 2 python combinations dictionary python-itertools

我试图从给定特定键的字典中的值中获取所有可能的字符串.例如,'A'可能意味着'aaa','aba'或'aac'和'B'可能意味着'bbb','bab'或'bbc'等.

我给出了一个输出示例,它显示了可能字符串的大多数组合

import itertools
in_ = 'ABC'
D = {'A':['aaa','aba','aac'],'B':['bbb','bab','bbc'],'C':['ccc','cac','ccb']}

#out_ = ['aaabbbccc','ababbbccc','aacbbbccc','aaababccc','aaabbcccc','aaabbbcac','aaabbbccb'...]
Run Code Online (Sandbox Code Playgroud)

我开始编写代码,但它开始变得非常混乱,我觉得有一种方法可以使用itertools或更多pythonic来实现这个目标

output = []
for char in in_:
    out_string = ''
    while char:
        for v in D[char]:
            while v:
                for char2 in in_:
                    out_string
#not pythonic . . . 
Run Code Online (Sandbox Code Playgroud)

sen*_*hin 5

好吧,你已经在那里itertools进口了.我们来用吧!我们想要采用笛卡尔积D['A'] × D['B'] × D['C'],因此我们将使用它itertools.product.

import itertools

in_ = 'ABC'
D = {'A':['aaa','aba','aac'],'B':['bbb','bab','bbc'],'C':['ccc','cac','ccb']}

iterables = [D[character] for character in in_]
out_ = [''.join(tup) for tup in itertools.product(*iterables)]
Run Code Online (Sandbox Code Playgroud)

现在,out_是:

['aaabbbccc', 'aaabbbcac', 'aaabbbccb', 'aaababccc', 'aaababcac', 'aaababccb', 
 'aaabbcccc', 'aaabbccac', 'aaabbcccb', 'ababbbccc', 'ababbbcac', 'ababbbccb', 
 'abababccc', 'abababcac', 'abababccb', 'ababbcccc', 'ababbccac', 'ababbcccb', 
 'aacbbbccc', 'aacbbbcac', 'aacbbbccb', 'aacbabccc', 'aacbabcac', 'aacbabccb', 
 'aacbbcccc', 'aacbbccac', 'aacbbcccb']
Run Code Online (Sandbox Code Playgroud)

这是你想要的结果吗?