Python 循环迭代元组
我是Python的初学者(20年后回到编码领域…) 我正在写一个小脚本来学习不规则的英语动词。 我创建了我的dict,看起来像这样(它是用法语写的) 如果我想重复这些赘言,我正在这样做,例如:Python 循环迭代元组,python,for-loop,dictionary,tuples,Python,For Loop,Dictionary,Tuples,我是Python的初学者(20年后回到编码领域…) 我正在写一个小脚本来学习不规则的英语动词。 我创建了我的dict,看起来像这样(它是用法语写的) 如果我想重复这些赘言,我正在这样做,例如: for verb, (pret, past, trad) in verbes.items(): print "Le verbe %s se conjugue au prétérit par %s, au participe passé par %s et se traduit par %s" %
for verb, (pret, past, trad) in verbes.items():
print "Le verbe %s se conjugue au prétérit par %s, au participe passé par %s et se traduit par %s" % (verb, pret, past, trad)
好的,行了。
然后我发现我可以导入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'
回溯(最近一次呼叫最后一次):
文件“\exverbe1.py”,第209行,在
对于rand.items()中的动词,(pret、pass、trad):AttributeError:'tuple'对象没有属性'items'
我还没有上“元组”课,但我试着把它变成一个列表,一个dict等等,但没有成功。我查看了stackoverflow中的“for loop tuple”,没有结果。所以现在我在3个小时后寻求帮助试图解决这个问题。。。
谢谢random.choice(verbs.items())
从verbs.items()
中随机选取一个元组<因此,code>rand包含一项-rand[0]
保留键和rand[1]
值
如果您要做的是迭代值列表中的项:
for val in rand[1]:
print val
要将rand
元组解压为其组成部分,请执行以下操作:
verb, (pret, past, trad)
verb
现在包含键,pret
、pass
和trad
列表中与键对应的每个元素。rand
是来自verbs
的项,因此无需再次调用项:
rand = random.choice(verbes.items())
verb, (pret, past, trad) = rand
dict.items()
返回dict中的“项”列表。每个项都是(键、值)
形式的元组random.choice
返回其中一个元组。我看到您试图循环使用rand
,也许您想要多个随机项?如果是这样,您可以执行以下操作:
for i in range(N):
verb, (pret, past, trad) = random.choice(verbes.items())
# Do more stuff
更新
在python中,他们调用一个片段,比如a,b=iterable
unpacking。您可以在右侧使用许多不同的类型,例如:
# 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=项目
与(a,b)=项目
相同
Python 3引入了我从未使用过的更高级的解包类型,但您可以阅读它们。
random.choice(verbs.items())
提供了一个元组(键,值)
,而不是字典。如错误消息所述,元组没有items
属性。您可以直接或间接地分配它:verb,(pret,pass,trad)=random.choice(verbes.items())或保存\u keyval\u元组的某些变量。items返回一个作为键/值对的元组列表,random.choice选择这些元组中的一个,这样你就有了一个二元元组而不是dict。顺便问一下,你想要的输出是什么?我想随机打印动词或前置词或过去或翻译,用户必须写下过去,动词前置词,如果出现“翻译”,或者过去,前置词翻译,如果出现“动词”,等等,好的,谢谢你。但我不明白这部分动词,(pret,pass,trad)=rand
如何将所有这些赋值到一个变量中?@rEkOM我已经添加了python解包规则的基本解释。
a, (b, c, d) = ("A", "BCD")
# is the same as
a, temp = ("A", "BCD")
(b, c, d) = temp