列表嵌套字典的笛卡尔积

2023-11-29

我有一些代码可以生成列表字典的所有组合

import itertools
import collections

def gen_combinations(d):
    keys, values = d.keys(), d.values()
    combinations = itertools.product(*values)

    for c in combinations:
        yield dict(zip(keys, c))

假设我有一本字典A like

A = {'a': [0, 1],
     'b': [2, 3, 4]}

它产生:

{'a': 0, 'b': 2}
{'a': 0, 'b': 3}
{'a': 0, 'b': 4}
{'a': 1, 'b': 2}
{'a': 1, 'b': 3}
{'a': 1, 'b': 4}

现在我希望它能够与列表的嵌套字典一起使用,例如

B = {'s1': {'a': [0, 1],
            'b': [0, 1, 2] },
     's2': {'c': [0, 1],
            'd': [0, 1] }}

这应该产生类似的结果:

{'s1': {'a': 0, 'b': 0},
 's2': {'c': 0, 'd': 0}}

{'s1': {'a': 0, 'b': 0},
 's2': {'c': 0, 'd': 1}}

{'s1': {'a': 0, 'b': 0},
 's2': {'c': 1, 'd': 0}}

{'s1': {'a': 0, 'b': 0},
 's2': {'c': 1, 'd': 1}}

等等所有的组合...... 我正在寻找一种优雅的方式来做到这一点。没有任何特定的性能限制,它们是小字典。


只需创建输出的乘积gen_combinations()对于外部字典中的每个键:

def gen_dict_combinations(d):
    keys, values = d.keys(), d.values()
    for c in itertools.product(*(gen_combinations(v) for v in values)):
        yield dict(zip(keys, c))

这基本上是相同的模式,只是现在而不是使用values直接,我们使用输出gen_combinations():

>>> for c in gen_dict_combinations(B):
...     print(c)
...
{'s1': {'a': 0, 'b': 0}, 's2': {'c': 0, 'd': 0}}
{'s1': {'a': 0, 'b': 0}, 's2': {'c': 0, 'd': 1}}
{'s1': {'a': 0, 'b': 0}, 's2': {'c': 1, 'd': 0}}
{'s1': {'a': 0, 'b': 0}, 's2': {'c': 1, 'd': 1}}
{'s1': {'a': 0, 'b': 1}, 's2': {'c': 0, 'd': 0}}
{'s1': {'a': 0, 'b': 1}, 's2': {'c': 0, 'd': 1}}
{'s1': {'a': 0, 'b': 1}, 's2': {'c': 1, 'd': 0}}
{'s1': {'a': 0, 'b': 1}, 's2': {'c': 1, 'd': 1}}
{'s1': {'a': 0, 'b': 2}, 's2': {'c': 0, 'd': 0}}
{'s1': {'a': 0, 'b': 2}, 's2': {'c': 0, 'd': 1}}
{'s1': {'a': 0, 'b': 2}, 's2': {'c': 1, 'd': 0}}
{'s1': {'a': 0, 'b': 2}, 's2': {'c': 1, 'd': 1}}
{'s1': {'a': 1, 'b': 0}, 's2': {'c': 0, 'd': 0}}
{'s1': {'a': 1, 'b': 0}, 's2': {'c': 0, 'd': 1}}
{'s1': {'a': 1, 'b': 0}, 's2': {'c': 1, 'd': 0}}
{'s1': {'a': 1, 'b': 0}, 's2': {'c': 1, 'd': 1}}
{'s1': {'a': 1, 'b': 1}, 's2': {'c': 0, 'd': 0}}
{'s1': {'a': 1, 'b': 1}, 's2': {'c': 0, 'd': 1}}
{'s1': {'a': 1, 'b': 1}, 's2': {'c': 1, 'd': 0}}
{'s1': {'a': 1, 'b': 1}, 's2': {'c': 1, 'd': 1}}
{'s1': {'a': 1, 'b': 2}, 's2': {'c': 0, 'd': 0}}
{'s1': {'a': 1, 'b': 2}, 's2': {'c': 0, 'd': 1}}
{'s1': {'a': 1, 'b': 2}, 's2': {'c': 1, 'd': 0}}
{'s1': {'a': 1, 'b': 2}, 's2': {'c': 1, 'd': 1}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表嵌套字典的笛卡尔积 的相关文章

  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List
  • django 删除模板中的硬编码 URL

    我知道在模板文件中我可以包含此代码 它将返回链接列表 for q in all ul li a href q question text a li ul endfor 现在 django 将搜索名称 detail in the urls p
  • Python 3.6 shell 中可点击的 html 链接?

    比如说 我有一个充满 html 链接的列表 看起来像这样 https www nytimes com 2017 05 19 realestate they can afford to buy but they would rather re
  • 如何在 Google App Engine 中验证传入电子邮件地址的发件人?

    我正在尝试在 Google App Engine 的 Python SDK 中编写一个基于电子邮件的应用程序 我注意到谷歌允许您通过其 API 接收电子邮件 http code google com appengine docs pytho
  • 无法从 gi.repository 导入 Webkit

    当我尝试导入时Webkit from gi repository 它给出了ImportError from gi repository import Webkit ERROR root Could not find any typelib
  • 如何在 Google App Engine (GAE) 上使用 bcrypt? [复制]

    这个问题在这里已经有答案了 我发现了一个 python 的 bcrypt 库 它似乎非常容易使用 比特加密 1 0 1 https pypi python org pypi bcrypt 1 0 1 安装它并在我的本地计算机上测试 hell
  • 如何取消选择单选按钮 tkinter

    我看过几个在线教程 它们似乎都不能正常工作 我需要在单击清除按钮后取消选择单选按钮 deselect 方法不执行任何操作 清除文本和输入框工作正常 请协助 谢谢你 from tkinter import class Example Fram
  • 始终执行代码和 python 脚本的结尾

    Python中有没有一种方法可以让代码块始终在程序末尾执行 除非kill 9 我们有一个 Jenkins 项目 它在构建过程中启动 python 脚本 如果开发人员决定中止工作 那么就会留下大量工件 这些工件可能 并且正在 影响未来的构建
  • pyinstaller错误:OSError:[WinError 6]句柄无效

    该文件使用终端命令获取 wifi 密码netsh wlan show profiles我之前使用 pyinstaller 创建了一些 exe 它们工作得很好 代码 import subprocess import time import s
  • 如何捕获从另一个 python 脚本执行的 python 脚本的打印?

    我有2个脚本script1 py and script2 py在同一文件夹中 script1 py 使用 Popen 调用 script2 py 有关详细信息 请参阅下面的代码 问题是来自 script2 py 的打印未在 script1
  • 为什么Python在函数中增加变量时会抱怨赋值前的引用?

    为什么Python会抱怨chrome在分配之前被引用 它不会抱怨字典 如果Python 2 5 有所不同的话 那就是这样 def f google browser chrome chrome 1 google dict chrome 1 f
  • 使用 pandas“to_csv”防止尾随零

    我正在尝试将 CSV 字符串导出到 D3 Web 应用程序 但是命令to csv坚持在数据中添加尾随 0 这会妨碍 D3 的正确使用 这是一个说明问题的最小示例 我的 简化的 数据框是 gt gt gt df pd DataFrame Al
  • macOS Sierra 上的 Python PyQt

    如何在装有 OS X Sierra 的 Mac 上使用 PyQt 4 或 5 看来我必须等待 PyQt 的新版本 但我不确定这是否属实 确保你有homebrew https brew sh安装 使用以下命令 brew tap cartr q
  • 使用 MingW 在 Windows 上传送 PyGObject/GTK+ 应用程序

    我在 Windows 上使用 PyGObject GTK 和 Python3 7 并且担心如何打包我的应用程序 借助Python官方生态系统 可以轻松使用冷冻机和venvs 然而 Windows 上的 PyGObject 和 GTK 需要
  • 打字!带有 pyautogui 的字符

    这可以模拟击键 import pyautogui pyautogui typewrite hello world interval 0 1 除了那个 它写道hello world 使用 FR 键盘布局 它写道hello world 使用 E
  • pyspark中的函数input()

    我的问题是当我输入 p 的值时 没有任何反应 它不执行 请问有办法修复它吗 import sys from pyspark import SparkContext sc SparkContext local simple App p inp
  • Python 将 *args 转换为列表

    这就是我正在寻找的 def init self args list of args magic Parent init self list of args 我需要将 args 传递给单个数组 以便 MyClass init a b c Pa
  • 是否可以模拟 Python 3.6 中的内置 len() 函数?

    是否可以模拟内置len Python 3 6 中的函数 我有一个类定义了一个简单的方法 该方法依赖于len 函数如下 class MyLenFunc object def is longer than three characters se
  • 操作数无法与形状 (128,) (0,) 错误一起广播

    我正在尝试实现面部识别登录系统 但出现错误 操作数无法与形状 128 0 一起广播 我不知道什么或如何解决它 这是我已实现的 view py 和 FaceDetector py 以及我从服务器收到的错误 errors Traceback m

随机推荐