对多个输入集的理解
Comprehensions with multiple input sets
我正在用 python 进行试验,但我无法理解我正在做的事情的上下文中的错误消息。
我正在研究推导并试图找到一种模式来创建具有多个输入集的 list/dictionary 推导(假设这是可能的):
注:这里的input set这个词是指理解的输入区。在 setbuilder 表示法中,python 推导出其理解 [Y for X in LIST],Y 是输出函数,X 是变量,LIST 是输入集。
假设我有以下工作代码:
from random import randint
mydict = {k: 0 for k in range(10)}
result = {randint(0,9): v + 1 for v in mydict.values()}
我不想对此做任何特别的事情。这甚至不是有用的代码,因为它不会按预期工作。字典中的所有元素都将具有值 1,而不仅仅是随机生成器指向的那些元素。 我唯一的 objective 是从我开始尝试使用输入集元组的地方开始。
from random import randint
mydict = {k: 0 for k in range(10)}
result = {k: v + 1 for k, v in (randint(0,9), mydict.values())}
这个选项给我:TypeError: 'int' object is not iterable
。
通过交换输入集和解包我有:
result = {k: v + 1 for *v, k in (mydict.values(), randint(0,9))}
但是这个选项给了我:TypeError: can only concatenate list (not "int") to list
出现这些错误是因为我正在尝试做一些语言语法不理解的事情,还是我遗漏了什么但实际上我可以修复代码?
您将不得不为随机数创建一个单独的理解,就目前而言,您只有一个随机数。此外,您还需要压缩结果以获得组合实体:
>>> from random import randint
>>> mydict = {k: 0 for k in range(10)}
>>> result = {k: v + 1 for k, v in zip([randint(0,9) for _ in range(10)] , mydict.values())}
>>> result
{2: 1, 3: 1, 4: 1, 5: 1, 8: 1, 9: 1}
请注意,由于您的初始字典的所有键的值为 0
,因此结果字典中的所有值为 1
(0+1
)。
此外,由于我们使密钥随机,因此可能存在重叠(例如 2
生成了两次),因此我们看不到 result
中的所有密钥字典.
正如@wim 在下面的评论中指出的那样,生成此结果字典的更好方法是使用:
>>> {randint(0,9): v+1 for v in mydict.values()}
{0: 1, 1: 1, 2: 1, 3: 1, 6: 1, 7: 1}
我正在用 python 进行试验,但我无法理解我正在做的事情的上下文中的错误消息。
我正在研究推导并试图找到一种模式来创建具有多个输入集的 list/dictionary 推导(假设这是可能的):
注:这里的input set这个词是指理解的输入区。在 setbuilder 表示法中,python 推导出其理解 [Y for X in LIST],Y 是输出函数,X 是变量,LIST 是输入集。
假设我有以下工作代码:
from random import randint
mydict = {k: 0 for k in range(10)}
result = {randint(0,9): v + 1 for v in mydict.values()}
我不想对此做任何特别的事情。这甚至不是有用的代码,因为它不会按预期工作。字典中的所有元素都将具有值 1,而不仅仅是随机生成器指向的那些元素。 我唯一的 objective 是从我开始尝试使用输入集元组的地方开始。
from random import randint
mydict = {k: 0 for k in range(10)}
result = {k: v + 1 for k, v in (randint(0,9), mydict.values())}
这个选项给我:TypeError: 'int' object is not iterable
。
通过交换输入集和解包我有:
result = {k: v + 1 for *v, k in (mydict.values(), randint(0,9))}
但是这个选项给了我:TypeError: can only concatenate list (not "int") to list
出现这些错误是因为我正在尝试做一些语言语法不理解的事情,还是我遗漏了什么但实际上我可以修复代码?
您将不得不为随机数创建一个单独的理解,就目前而言,您只有一个随机数。此外,您还需要压缩结果以获得组合实体:
>>> from random import randint
>>> mydict = {k: 0 for k in range(10)}
>>> result = {k: v + 1 for k, v in zip([randint(0,9) for _ in range(10)] , mydict.values())}
>>> result
{2: 1, 3: 1, 4: 1, 5: 1, 8: 1, 9: 1}
请注意,由于您的初始字典的所有键的值为 0
,因此结果字典中的所有值为 1
(0+1
)。
此外,由于我们使密钥随机,因此可能存在重叠(例如 2
生成了两次),因此我们看不到 result
中的所有密钥字典.
正如@wim 在下面的评论中指出的那样,生成此结果字典的更好方法是使用:
>>> {randint(0,9): v+1 for v in mydict.values()}
{0: 1, 1: 1, 2: 1, 3: 1, 6: 1, 7: 1}