python - 有没有办法通过访问字典来生成字符串字符的组合列表?
问题描述
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']
解决方案
尽管起初我在阅读您的问题时遇到了一些麻烦,但我相信您正在寻找一个函数,该函数将获取包含字典键的字符串并从这些键下的字符串中查找所有字符组合。
虽然我们可以使用 for 循环或列表推导来自己实现这一点,但您正在寻找的是笛卡尔积的一种形式。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))]
*()
是一个生成器推导,它将每个键转换为其对应的值,然后对其进行扩展,以便每个条目都是 的单独参数itertools.product
。因此,如果我们填写keys = '234'
它,它将扩展为itertools.product('abc', 'def', ghi')
,这会给出所需的结果。这"".join(res) for res in
是我们需要的列表推导,因为itertools.product
实际上返回元组,并且您需要一个字符串列表。
推荐阅读
- python - 无法在 Django 中导入本地模块
- mysql - 即使表没有所有ID,如何在查询中获取所有结果
- java - WebSphere 中 LinkageError 导致的 ServiceConfigurationError
- javascript - 未设置显示 cookie
- r - 如何将chr转换为数字
- javascript - 输入提交字段上的 jQuery 事件
- sql - Golang、database/sql、Postgres - 当您需要结果时,是否正在使用带有 INSERT 错误做法的 QueryRow?
- javascript - 如何更改网页中的文字大小?
- python - 使用 Pytorch 的基类“nn.Linear”类实现简单单层 RNN 的难度
- python - MATPLOTLIB - 多个条形的条形标题