Python 两个 for 循环在列表推导中具有 2 个项目



我试图用 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]})

输出

{'再见': ' 再见

', '你好': '嗨', '你好': '你好'}

相关内容

最新更新