python - 列表相对于字典的不同组合
问题描述
假设我有一个清单
my_list = [a, b, c]
和一本字典
my_dict = dict({a:a_prime, b:b_prime, c:c_prime})
其中所有字母 letter_prime 都是整数。如何找到创建与字典相关的唯一列表的所有组合?在上面的示例中,我想要一个将 [a,b,c], my_dict 作为输入的函数
magic_function([a,b,c], my_dict)
.
.
.
return [[a_prime, b, c], [a, b_prime, c], [a, b, c_prime], [a_prime, b_prime, c], [a_prime, b, c_prime], [a, b_prime, c_prime], [a_prime, b_prime, c_prime]]
也有独特的即时参考:
我认为 [a_prime,b,c], [b,c, a_prime] 是相等的,即顺序不重要。
并且可能是某些组合是相同的,例如 [a_prime, b, c] 结果也相等 [a, b_prime, c_prime]。如果只返回其中一个就好了。
解决方案
您可以创建所有可能的掩码,告诉我们是否在 dict 中选择键或对应的值:
from itertools import product
my_dict = {'a': 'a_prime', 'b': 'b_prime', 'c': 'c_prime'}
def magic(keys):
out = []
for key_or_val in product([True, False], repeat=len(keys)):
out.append([key if k_v else my_dict[key] for key, k_v in zip(keys, key_or_val)])
return out
print(magic(['a', 'b', 'c']))
# [['a', 'b', 'c'], ['a', 'b', 'c_prime'], ['a', 'b_prime', 'c'], ['a', 'b_prime', 'c_prime'],
# ['a_prime', 'b', 'c'], ['a_prime', 'b', 'c_prime'], ['a_prime', 'b_prime', 'c'],
# ['a_prime', 'b_prime', 'c_prime']]
如果您只想要唯一值,只需使用一组:
uniques = set(tuple(combination) for combination in magic(['a', 'b', 'c']))
推荐阅读
- r - 在 tufte_handout 代码块中包含换行符?
- c++ - 我的代码出现错误。问题:从前序和中序遍历构造二叉树
- database - 更新经典 ASP 网站 MS 访问数据库
- ios - 将字典拆分为键数组和值数组
- google-chrome - 在网页抓取和 Puppeteer 方面,Chrome 和 Chromium 有什么区别?
- html - 如何创建页面特定链接
- reactive-programming - Flux 默认已经是顺序的,为什么还要使用 Schedulers.single(customScheduler)?
- linux - Linux 内核 conntrack 丢弃统计
- r - 删除字符串向量中带有空字符“”的元素
- laravel - 如何最大化内存以在 Laravel 中由工厂生成大量数据?