【问题标题】:Is there a way to generate a combo list of string characters by accessing the dictionary? [closed]有没有办法通过访问字典来生成字符串字符的组合列表? [关闭]
【发布时间】:2020-06-01 01:01:51
【问题描述】:

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

【问题讨论】:

    标签: python list loops dictionary


    【解决方案1】:

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

    虽然我们可以使用 for 循环或列表推导来自己实现这一点,但您正在寻找的是 Cartesian product 的一种形式。 Python 的标准库已经可以做到这一点,使用itertools.product。它接受任意数量的可迭代对象作为参数,并返回从这些可迭代对象中获取的单个元素的所有组合。

    因此,您的 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 实际上返回元组,而您需要一个字符串列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2012-05-17
      • 1970-01-01
      • 2022-06-12
      相关资源
      最近更新 更多