我是Python的初学者。我想了解毕达通的方法循环,因为我是一个C编码器很长时间。鉴于以下两行:
{k: v for out_d in outs for k, v in out_d.iteritems()}
[{} for i in range(nthreads)]有人能把它分解成遵循嵌套循环的C标准方法吗?
发布于 2017-09-13 12:44:48
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({})发布于 2017-09-13 12:45:05
等价物是:
res = {}
for out_d in outs:
for k, v in out_d.iteritems():
res[k] = v
res = []
for i in range(nthreads):
res.append({})请注意,您可以通过使用不同的缩进来找到这些相对简单的内容:
{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函数。
发布于 2017-09-13 12:47:05
for key, value in out_d.iteritems()- iteritems()遍历字典的键/值,所以out_d必须是字典
for out_d in outs-- for out_d in outs将遍历outs中的迭代器,基于前面的内容,我们可以假设这是一个字典列表
{k:v}-使用k,v的值创建一个新的字典理解
合在一起:
为每个键、字典out_d中的每个out_d、列表中的每个out_d创建一个字典理解值k,v。
new_dict = {}
for dictionary in outs:
for key, value in dictionary.iteritems()
new_dict[key] = valuehttps://stackoverflow.com/questions/46197885
复制相似问题