首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:遍历和组合嵌套字典中的值

Python:遍历和组合嵌套字典中的值
EN

Stack Overflow用户
提问于 2018-08-04 00:41:10
回答 1查看 61关注 0票数 0

我正在创建一个嵌套的字典,它描述了几种情况('1ql‘和'2ql'),每种情况都有不同数量的变体('var0','var1',...)。我使用字典理解的方式如下:

代码语言:javascript
运行
AI代码解释
复制
from numpy import random as rnd

QLS = {
    key: {
        idx: rad
        for idx, rad in enumerate(['var{}'.format(i) for i in range(rnd.randint(1, 4))])
        }
    for key in ['1ql', '2ql']
    }

这很有效,但我一直在为如何处理保存到文件的字典而苦苦挣扎。我想迭代“1ql”的每个变体,然后同时迭代“2ql”的每个迭代。这很容易实现,如下所示:

代码语言:javascript
运行
AI代码解释
复制
for key1, val1 in QLS['1ql'].items():
    for key2, val2 in QLS['2ql'].items():
        print('1ql: {}, 2ql: {}'.format(val1, val2))

对于'1ql‘的2个变体和'2ql’的3个变体,总共产生6个排列:

代码语言:javascript
运行
AI代码解释
复制
1ql: var0, 2ql: var0
1ql: var0, 2ql: var1
1ql: var0, 2ql: var2
1ql: var1, 2ql: var0
1ql: var1, 2ql: var1
1ql: var1, 2ql: var2

但是,我希望自动为任何数量的情况,为每个案例的任何数量的变化,而不需要手动指定这些。我尝试了不同的迭代方案,甚至颠倒了内键和外键,但都无济于事。

我真的很想学一种最简单的方法来完成这个任务。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 01:07:23

首先,转换数据以删除我们不需要的部分:

代码语言:javascript
运行
AI代码解释
复制
x = [[(case, var) for var in QLS[case].values()] for case in QLS.keys()]

现在,x类似于:

代码语言:javascript
运行
AI代码解释
复制
[[('1ql', 'var0'), ('1ql', 'var1'), ('1ql', 'var2')],
 [('2ql', 'var0'), ('2ql', 'var1'), ('2ql', 'var2')]]

最后,使用itertools.product()得到结果:

代码语言:javascript
运行
AI代码解释
复制
list(itertools.product(*x))

在您的实际代码中,您可能会迭代结果,并对每个结果使用print()以获得所需的格式,但是使用上面的list()包装会让您有所了解:

代码语言:javascript
运行
AI代码解释
复制
[(('1ql', 'var0'), ('2ql', 'var0')),
 (('1ql', 'var0'), ('2ql', 'var1')),
 (('1ql', 'var0'), ('2ql', 'var2')),
 (('1ql', 'var1'), ('2ql', 'var0')),
 (('1ql', 'var1'), ('2ql', 'var1')),
 (('1ql', 'var1'), ('2ql', 'var2')),
 (('1ql', 'var2'), ('2ql', 'var0')),
 (('1ql', 'var2'), ('2ql', 'var1')),
 (('1ql', 'var2'), ('2ql', 'var2'))]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51681527

复制
相关文章
【第21期】Flutter 文本框初始化时显示默认值
刚开始做Flutter文本框时候,使用的是TextField。似乎大多数情况下都没有问题。代码形式如下:
siberiawolf
2021/03/24
5K0
【第21期】Flutter 文本框初始化时显示默认值
在 Debian 中如何将用户添加到 Sudoers
sudo是一个命令行工具,它允许被信任用户以另外一个用户身份运行命令,默认是 root 用户。
雪梦科技
2020/05/11
12.6K0
在 Debian 中如何将用户添加到 Sudoers
在 Ubuntu 中如何将用户添加到 Sudoers
sudo是一个命令行程序,它允许被信任的用户以 root 或者其他用户身份去运行命令。
雪梦科技
2020/05/09
34.6K0
在 Ubuntu 中如何将用户添加到 Sudoers
Flutter 文本解读 6 | RichText 富文本的使用 (中)
@charset "UTF-8";.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1:first-child,.markdown-body h2:first-child,.markdown-body h3:first-child,.markdown-body h4:first-child,.markdown-body h5:first-child,.markdown-body h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.markdown-body h1:before,.markdown-body h2:before,.markdown-body h3:before,.markdown-body h4:before,.markdown-body h5:before,.markdown-body h6:before{content:"#";display:inline-block;color:#3eaf7c;padding-right:.23em}.markdown-body h1{position:relative;font-size:2.5rem;margin-bottom:5px}.markdown-body h1:before{font-size:2.5rem}.markdown-body h2{padding-bottom:.5rem;font-size:2.2rem;border-bottom:1px solid #ececec}.markdown-body h3{font-size:1.5rem;padding-bottom:0}.markdown-body h4{font-size:1.25rem}.markdown-body h5{font-size:1rem}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body strong{color:#3eaf7c}.markdown-body img{max-width:100%;border-radius:2px;display:block;margin:auto;border:3px solid rgba(62,175,124,.2)}.markdown-body hr{border:none;border-top:1px solid #3eaf7c;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;overflow-x:auto;padding:.2rem .5rem;margin:0;color:#3eaf7c;font-weight:700;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;border-radius:6px;border:2px solid #3eaf7c}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{font-weight:500;text-decoration:none;color:#3eaf7c}.markdown-body a:active,.ma
张风捷特烈
2021/01/26
2.6K0
Flutter 文本解读 6 | RichText 富文本的使用 (中)
flutter添加到android原生
1.创建一个flutter module flutter create -t module --org com.example my_flutter 2.在原生build.gradle下 android { //... compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } } 3.添加Flutter模块作为依赖项 有两种方式 ######(1)无需安装flutter sdk Flutter库打包为由A
程序员小何SS
2021/12/29
1.1K0
NXP的S32K144如何将静态库文件添加到 S32DS工程中?
我们经常使用静态库或者动态库,那么在NXP的s32k144使用中,如何将静态库文件 (*.a) 添加到 S32 Design Studio GCC 项目中呢?
李肖遥
2022/09/10
5.2K0
NXP的S32K144如何将静态库文件添加到 S32DS工程中?
flutter之文本输入
Flutter 提供了两个开箱即用的文本框组件:TextField 和 TextFormField。
用户1974410
2022/09/20
2.6K0
如何将MV中的音频添加到EasyNVR中做直播背景音乐?
EasyNVR已经支持自定义上传音频文件,可以做慢直播场景使用,前两天有一个开发者提出一个问题:想把一个MV中的音频拿出来放到EasyNVR中去做慢直播。
EasyNVR
2021/10/28
4.2K0
如何将MV中的音频添加到EasyNVR中做直播背景音乐?
使用 FocusScopeNode 在 TextFormFields 之间轻松移动焦点
Form和TextFormField是在 Flutter 中输入文本时非常有用的小部件。
徐建国
2021/08/09
1.2K0
Flutter中的文本输入框组件TextField
1. maxLines 最大输入行。默认为单行输入框,配置此参数后则为多行输入框;
越陌度阡
2021/01/05
5.2K0
Flutter中的文本输入框组件TextField
Nexus高级配置之如何将本地jar添加到Nexus中
Java后端技术所推送文章,为本人原创、网上收集或其他作者投稿,对于网上收集部分除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!^_^ QQ:1573876303。
Java后端技术
2018/08/09
2.7K0
Nexus高级配置之如何将本地jar添加到Nexus中
非局部静态数据在多编译单元中的窘境
而编译单元指的就是*.o文件,假如一个工程是由n个单独的cpp和对应的头文件,那么就会被事先编译生成n个*.o文件,有时候我们将这些*.o文件称为目标文件,它们作为生成最后的统一可执行文件,也被称为编译单元。
用户2617681
2019/08/08
7960
Flutter 文本溢出
3. 使用 Expanded 挂件包裹 Text 挂件,并使用 Text 挂件的 ellipsis 属性
Jimmy_is_jimmy
2022/11/08
2K0
Flutter 文本溢出
每日tips:FocusScopeNode移动焦点你用对了吗?
在 Flutter中,Form和TextFormField是输入文本时非常有用的Widget。
用户1974410
2022/09/20
8640
如何将数字转换成口语中的文本串
今天突发奇想, 写一个将数字转换成中文字符串的函数. 并不是将 1234 转成 '1234' , 而是将 1234 转成 '一千二百三十四'.
烟草的香味
2020/07/01
1.4K0
如何将WebRTC播放协议添加到EasyCVR?
自2020年浏览器的发展和兼容性发生了变化,WebRTC的延时性、安全性得到了提升和保护,尤其是疫情爆发后,实时视频的需求比之前增长了30倍,这更刺激了WebRTC产品的持续快速发展。因此我们也在EasyGBS、EasyDSS等平台内实现了WebRTC协议的播放。
TSINGSEE青犀视频
2021/11/23
1.5K0
在Oracle中,如何将一个数据库添加到CRS中?
虽然通过DBCA(DataBase Configuration Assistant,数据库配置助手)创建的数据库会自动加入CRS中,但通过RMAN创建的数据库是不会被加入CRS中的,在这种情况下就需要手动添加,将数据库加入CRS中后就可以通过srvctl来管理数据库了。
AiDBA宝典
2023/04/26
2.7K0
在Oracle中,如何将一个数据库添加到CRS中?
Flutter 金融应用程序的 UI
在本教程中,我将向您展示如何使用 Flutter 和 android studio
徐建国
2021/08/03
7710
wxpython显示静态文本
wx作为一个GUI图形界面的模块一定要显示文本。 先显示静态文本吧。 wxpython中wx.StaticText可以显示静态文本。
里克贝斯
2021/05/21
2.4K0
wxpython显示静态文本
点击加载更多

相似问题

Flutter TextFormField。如何将验证文本粘贴到TextFormField中

359

覆盖文本的Flutter TextFormField指针

17

Flutter:使用ChangeNotifier更新TextFormField文本

155

Flutter TextFormField装饰

10

如何在TextFormField Flutter中清空焦点提示文本

254
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文