for循环迭代元组

2024-06-25 22:50:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者(20年后又回到编码领域…)

我正在写一个小剧本来学习不规则英语动词。 我做了一个这样的口述(法语)

verbes = {
"abide":["abode","abode","respecter / se conformer à"],
"arise":["arisen","arisen","survenir"],
}

如果我想迭代verbes,我会这样做,例如:

^{pr2}$

好吧,那就行了。 然后我发现我可以导入random来获取一个随机键和值

rand = random.choice(verbes.items())

如果我打印rand,我有一个键,值 但如果我再重复一次,就会有一个回溯:

Traceback (most recent call last):
File ".\exverbe1.py", line 209, in <module>
    for verb, (pret, past, trad) in rand.items(): AttributeError: 'tuple' object has no attribute 'items'

我还没上“元组”课,但我试着把它变成一个列表、一个dict等,但没有成功。我查看了stackoverflow中的“for loop tuple”,但没有结果。所以现在我想在3个小时后寻求帮助。。。 谢谢


Tags: in编码foritems动词random领域剧本
2条回答

random.choice(verbes.items())verbes.items()中随机选取一个元组。rand因此包含一个项-rand[0]持有密钥,rand[1]值。在

如果您正在尝试遍历值列表中的项:

for val in rand[1]:
  print val

要将rand元组解压为其组成部分:

^{pr2}$

verb现在包含键,pretpast和{}与该键对应的列表中的每个元素。在

rand是来自verbes的项目,因此无需再次调用项目:

rand = random.choice(verbes.items())
verb, (pret, past, trad) = rand

dict.items()返回dict中“items”的列表。每个item都是(key, value)形式的元组。random.choice返回其中一个元组。我看到你在尝试循环rand,也许你想要多个随机项?如果是这样的话,你可以这样做:

^{pr2}$

更新

在python中,它们称为诸如a, b = iterable解包的asigment。您可以在右侧使用许多不同的类型,例如:

# A tuple
a, b = ("A", "B")
# A list
a, b = ["A", "B"]
# A string
a, b = "AB"

在简单的情况下,数量或变量需要与iterable中的项数相同,否则python将引发错误。您可以嵌套解压缩,以便:

 a, (b, c, d) = ("A", "BCD")
 # is the same as
 a, temp = ("A", "BCD")
 (b, c, d) = temp

外部的()是可选的,因此a, b = item与{}相同。在

Python3引入了我从未使用过的更高级的解包类型,但是您可以阅读它们here。在

相关问题 更多 >