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

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

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

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

代码语言:javascript
复制
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
复制
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
复制
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 09:07:23

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

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

现在,x类似于:

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

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

代码语言:javascript
复制
list(itertools.product(*x))

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

代码语言:javascript
复制
[(('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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档