我无法理解这个迭代器

时间:2018-03-30 14:45:15

标签: loops dictionary iterator iterable

以下是我想要了解的代码。我看过this

my_dict = {'name': 'Klauss', 'age': 26, 'Date of birth': '15th july'}
next(v for k,v in my_dict.items() if 'Date' in k)
'15th july'

对于我的生活,我无法理解v和k代表什么。此外,当k被分配值?

2 个答案:

答案 0 :(得分:1)

您提供的代码段创建了一个可以从@NonLocationActions:NonLocationActions函数中的my_dict项进行迭代的对象。然后打印满足next if 'Date' in k条件的第一个值。

创建可迭代对象(在您的情况下为'15th july')时会分配

k, v个值并代表键(list'name''age' )和值('Date of birth''Klauss'26)。

答案 1 :(得分:1)

词典上的

items()函数迭代此词典的键值对。

例如,您可以在the documentation of a simple loop over dictionnary key/values中找到它。

所以:

>>> [(k,v) for k,v in my_dict.items()]

[('Date of birth', '15th july'), ('age', 26), ('name', 'Klauss')]

是一个包含dict(键,值)对的列表(按随机顺序排列)。

以同样的方式:

 >>> [v for k,v in my_dict.items()]
 ['15th july', 26, 'Klauss']

是一个包含字典值的列表。

最后:

>>> [v for k,v in my_dict.items() if 'Date' in k]
['15th july']

是密钥包含单词“Date”

的dict值列表

注意:这意味着,如果您定义:

>>> my_dict = {'name': 'Klauss', 'age': 26, 'Date of birth': '15th july', 'Date of death' : '16th march'}

你会得到:

>>> [v for k,v in my_dict.items() if 'Date' in k]
['16th march', '15th july']

考虑“下一步”,您可能会发现here

  

next(iterator [,default])

     

通过调用 next ()方法从迭代器中检索下一个项目。如果给定default,则在迭代器耗尽时返回,否则引发StopIteration。

这意味着

>>> next(v for k,v in my_dict.items() if 'Date' in k)
'16th march'

键的第一个(按随机顺序)值,其中包含“Date”一词