有没有一种方法可以通过访问字典来生成字符串的组合列表?

时间:2020-06-01 01:01:51

标签: python list loops dictionary

key_map = {'1':“'-”,'2':'abc','3':'def', '4':'ghi','5':'jkl','6':'mno', '7':'pqrs','8':'tuv','9':'wxyz'}

生成所有3个字符前缀的列表,这些前缀可以是 从开始的按键产生。

pt = PText() pt.add('234') [pt.possible_prefixes()中前缀的前缀]

    ['adg', 'adh', 'adi', 'aeg', 'aeh', 'aei', 'afg', 'afh', 'afi', 'bdg', 'bdh', 'bdi', 'beg', 'beh', 'bei', 'bfg', 'bfh', 'bfi', 'cdg', 'cdh', 'cdi', 'ceg', 'ceh', 'cei', 'cfg', 'cfh', 'cfi']

1 个答案:

答案 0 :(得分:1)

尽管起初我在阅读您的问题时遇到了一些麻烦,但我相信您正在寻找一个函数,该函数将使用包含字典键的字符串,并从这些键下的字符串中查找所有字符组合。

尽管我们可以使用循环或列表解析来自己实现,但是您正在寻找的是Cartesian product的形式。 Python的标准库已经可以使用itertools.product来做到这一点。它以任意数量的Iterables作为参数,并返回从这些Iterables中获取的单个元素的所有组合。

因此,您的possible_prefixes(keys)看起来像

import itertools
def possible_prefixes(keys):
    return ["".join(res) for res in itertools.product(*(key_map[key] for key in keys))]

*()generator comprehension,它将每个键转换为其相应的值,然后对其进行扩展,以便每个条目都是itertools.product的单独参数。因此,如果我们填写keys = '234',它将扩展为itertools.product('abc', 'def', ghi'),从而得到所需的结果。 "".join(res) for res in是我们需要的列表理解,因为itertools.product实际上返回元组,并且您需要一个字符串列表。