基本上,我正在尝试嵌套字典理解,但尝试失败。这是我尝试过的。
dict2 = {key:value for key, value in line.split(":")
for line in ["1:One", "2:Two", "4:Four"]}
print dict2
当我运行它时,它给了我
NameError: name 'line' is not defined
而且,当我反转这样的for
陈述时
dict2 = {key:value for line in ["1:One", "2:Two", "4:Four"]
for key, value in line.split(":")}
print dict2
结果是
ValueError: need more than 1 value to unpack
我需要有关dictionary
(或list
)理解的嵌套结构的帮助。一个例子会很有帮助。
请注意,有一种更好的方法来执行此操作而无需了解字典。见下文。我将首先用您的方法解决问题。
您需要在理解中使用嵌套顺序。以嵌套常规循环时的顺序列出循环。
该line.split()
表达式返回两个项目的序列,但是每个项目都不是键和值的元组。相反,只有一个元素被迭代。将拆分包裹在一个元组中,这样就产生了一个“序列”(key, value)
项,可以将两个结果分配给两个项:
dict2 = {key:value for line in ["1:One", "2:Two", "4:Four"]
for key, value in (line.split(":"),)}
这等效于:
dict2 = {}
for line in ["1:One", "2:Two", "4:Four"]:
for key, value in (line.split(":"),):
dict2[key] = value
只需要嵌套循环的地方,因为您不能这样做:
dict2 = {}
for line in ["1:One", "2:Two", "4:Four"]:
key, value = line.split(":")
dict2[key] = value
但是,在这种情况下,应该使用dict()
构造函数来代替字典理解。它希望两个元素的序列,简化了整个操作:
dict2 = dict(line.split(":") for line in ["1:One", "2:Two", "4:Four"])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句