【发布时间】:2015-06-26 15:12:59
【问题描述】:
我正在试验 python,并且一直试图理解我正在做的上下文中的错误消息。
我正在玩转推导并试图找到一种模式来创建具有多个输入集的列表/字典推导(假设这是可能的):
注意:这里的词输入集表示理解的输入区域。在 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,而不仅仅是随机生成器指向的那些。 我唯一的目标是在我开始尝试处理输入集的元组时有一个基础。
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
出现这些错误是因为我正在尝试做一些语言语法无法理解的事情,还是我遗漏了一些东西而实际上我可以修复代码?
【问题讨论】:
-
不清楚您期望的输出。说
randint(0,9)返回3;你想要什么result? -
你想要一个包含来自
range(10)的键和来自randint的随机值的字典吗? -
你们专注于代码意图。这里唯一的目的是看看是否有办法在理解中包含输入集的元组。代码只是我实验的基础。
-
—1 直到您提供示例输出
-
@AlexandreBell:我们可以想出六种方法来“在理解中包含一组输入集”(尽管因为您的问题中根本没有集合,而在回答您接受,我不确定您是否知道
set在 Python 中的含义)。它们中的大多数都与您感兴趣的任何事情无关,这就是为什么我们不知道如何“修复代码”而不知道它应该首先做什么。作为一款游戏,我们当然可以猜出最像你想象中的东西。
标签: python list dictionary list-comprehension dictionary-comprehension