"Name * not defined" 在嵌套 python 理解中
"Name * not defined" in nested python comprehension
我在这种形式的词典中收集了信息:
dico = {
'key1': ('el1', 'el2', 'el3'),
'key2': ('el4',),
'key3': ('el5', 'el6'),
}
我希望以这样的方式迭代它:
>>> for i in gen:
... print(i)
('key1', 'el1')
('key1', 'el2')
('key1', 'el3')
('key2', 'el4')
('key3', 'el5')
('key3', 'el6')
所以我是这样构建的 gen
:
gen = ((key, value) for value in values for key, values in dico.items())
但这会引发 NameError
:
NameError: name 'values' is not defined
怎么了?我该怎么办?
反转顺序以便名称解析:
gen = ((key, value) for (key, values) in dico.items() for value in values)
for 循环的顺序应与您编写的顺序相同:
for key, values in dico.items():
for value in values:
yield key, value
您需要按照嵌套顺序从左到右列出循环。你调换了那个订单。
这个有效:
gen = ((key, value) for key, values in dico.items() for value in values)
这与您将这些循环嵌套在生成器函数中的方式相对应:
for key, values in dico.items():
for value in values:
yield (key, value)
You have to reverse the order of gen generation code.
dico = {
'key1': ('el1', 'el2', 'el3'),
'key2': ('el4',),
'key3': ('el5', 'el6'),
}
gen = ((key, value) for (key, values) in dico.items() for value in values)
for i in gen:
print(i)
>>> ================================ RESTART ================================
>>>
('key1', 'el1')
('key1', 'el2')
('key1', 'el3')
('key2', 'el4')
('key3', 'el5')
('key3', 'el6')
>>>
How bellow code is eveluated:
gen = ((key, value) for (key, values) in dico.items() for value in values)
step 1: for (key, values) in dico.items()
step 2: values of step 1 will be input for bellow code:
for value in values
step 3: then for every value it will store the key, value pair in gen
dictionary.
我在这种形式的词典中收集了信息:
dico = {
'key1': ('el1', 'el2', 'el3'),
'key2': ('el4',),
'key3': ('el5', 'el6'),
}
我希望以这样的方式迭代它:
>>> for i in gen:
... print(i)
('key1', 'el1')
('key1', 'el2')
('key1', 'el3')
('key2', 'el4')
('key3', 'el5')
('key3', 'el6')
所以我是这样构建的 gen
:
gen = ((key, value) for value in values for key, values in dico.items())
但这会引发 NameError
:
NameError: name 'values' is not defined
怎么了?我该怎么办?
反转顺序以便名称解析:
gen = ((key, value) for (key, values) in dico.items() for value in values)
for 循环的顺序应与您编写的顺序相同:
for key, values in dico.items():
for value in values:
yield key, value
您需要按照嵌套顺序从左到右列出循环。你调换了那个订单。
这个有效:
gen = ((key, value) for key, values in dico.items() for value in values)
这与您将这些循环嵌套在生成器函数中的方式相对应:
for key, values in dico.items():
for value in values:
yield (key, value)
You have to reverse the order of gen generation code.
dico = {
'key1': ('el1', 'el2', 'el3'),
'key2': ('el4',),
'key3': ('el5', 'el6'),
}
gen = ((key, value) for (key, values) in dico.items() for value in values)
for i in gen:
print(i)
>>> ================================ RESTART ================================
>>>
('key1', 'el1')
('key1', 'el2')
('key1', 'el3')
('key2', 'el4')
('key3', 'el5')
('key3', 'el6')
>>>
How bellow code is eveluated:
gen = ((key, value) for (key, values) in dico.items() for value in values)
step 1: for (key, values) in dico.items()
step 2: values of step 1 will be input for bellow code:
for value in values
step 3: then for every value it will store the key, value pair in gen
dictionary.