我试图用 2 个变量理解一行中的两个循环,但它总是返回一个变量,我似乎不明白它背后的原因。我的代码如下:
text = ['hello, hi', 'goodbye, bye', 'how do you do, howdy']
mapped = {x:y for string in text for x, y in string.split(',')}
我得到的错误:
值错误:要解压缩的值太多(预期为 2(
如何调整我的行,使其返回 2 个变量而不是一个变量?还是不可能?
我知道扩展后它如下所示:
for string in text:
for x, y in string.split(','):
mapped[x] = y
我不明白我哪里出错了。
仔细查看您真正想要的操作顺序 - 我认为您只是缺少一些括号:
text = ['hello, hi', 'goodbye, bye', 'how do you do, howdy']
mapped = {x:y for x, y in [string.split(',') for string in text]}
为我工作。
我找到了一种不同的方法来获得相同的结果,但没有使用双重理解(这违背了这个问题的重点(。我正在分享它,以防有人想知道。
dict(string.split(',') for string in text)
由于x:y for x, y
是多余的,因此可以简单地省略。
出现此错误是因为string.split()
正在创建一个列表,看起来像
['hello', ' hi']
['goodbye', ' bye']
['how do you do', ' howdy']
现在,for x, y in string.split()
是无用的,因为没有 2 个值可以分配 x 和 y。只有 1 个列表。你可以试试
for string in text:
lis = string.split(',')
mapped.update({lis[0] : lis[1]})
输出
{'再见': ' 再见
', '你好': '嗨', '你好': '你好'}