首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将循环循环的Pythonic方法转换为嵌套循环

将循环循环的Pythonic方法转换为嵌套循环
EN

Stack Overflow用户
提问于 2017-09-13 12:41:26
回答 4查看 122关注 0票数 2

我是Python的初学者。我想了解毕达通的方法循环,因为我是一个C编码器很长时间。鉴于以下两行:

代码语言:javascript
复制
{k: v for out_d in outs for k, v in out_d.iteritems()}
[{} for i in range(nthreads)]

有人能把它分解成遵循嵌套循环的C标准方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-13 12:44:48

代码语言:javascript
复制
my_dict = {k: v for out_d in outs for k, v in out_d.iteritems()}

# is equivalent to

my_dict = {}
for out_d in outs:
    for key, value in out_d.iteritems():
        my_dict[key] = value



my_list = [{} for i in range(nthreads)]

# is equivalent to

my_list = []
for i in range(nthreads):
    my_list.append({})
票数 2
EN

Stack Overflow用户

发布于 2017-09-13 12:45:05

等价物是:

代码语言:javascript
复制
res = {}
for out_d in outs:
    for k, v in out_d.iteritems():
        res[k] = v

res = []
for i in range(nthreads):
    res.append({})

请注意,您可以通过使用不同的缩进来找到这些相对简单的内容:

代码语言:javascript
复制
{k: v for out_d in outs for k, v in out_d.iteritems()}

=>

{k: v 
 for out_d in outs 
 for k, v in out_d.iteritems()}

=>

{        k: v 
 for out_d in outs 
     for k, v in out_d.iteritems()}

唯一棘手的一点是,第一个语句k: v实际上在最内部循环中,但是后面的所有表达式都是按照“晕”-equivalent的顺序排列的。另外,根据理解的类型,第一个陈述也是不同的。

对于词典理解,它是the_dict[key] = value而不是key: value,对于列表理解是the_list.append(value),对于集合理解是the_set.add(value)。生成器表达式更复杂,因为您必须编写一个yield value函数。

票数 1
EN

Stack Overflow用户

发布于 2017-09-13 12:47:05

代码语言:javascript
复制
for key, value in out_d.iteritems()

- iteritems()遍历字典的键/值,所以out_d必须是字典

代码语言:javascript
复制
for out_d in outs

-- for out_d in outs将遍历outs中的迭代器,基于前面的内容,我们可以假设这是一个字典列表

代码语言:javascript
复制
{k:v}

-使用k,v的值创建一个新的字典理解

合在一起:

为每个键、字典out_d中的每个out_d、列表中的每个out_d创建一个字典理解值k,v。

代码语言:javascript
复制
new_dict = {}
for dictionary in outs:
    for key, value in dictionary.iteritems()
        new_dict[key] = value
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46197885

复制
相关文章

相似问题

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