Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环迭代元组_Python_For Loop_Dictionary_Tuples - Fatal编程技术网

Python 循环迭代元组

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" %

我是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" % (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