我无法理解这个迭代器

Posted

技术标签:

【中文标题】我无法理解这个迭代器【英文标题】:I am unable to understand this iterator 【发布时间】:2018-09-09 14:48:22 【问题描述】:

下面是我试图理解的代码。我读过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赋值?

【问题讨论】:

【参考方案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')]

是一个包含字典的(键,值)对的列表(以随机顺序)。

同理:

 >>> [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() 方法从迭代器中检索下一项。如果给出默认值,则在迭代器耗尽时返回,否则引发 StopIteration。

这意味着

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

是字典的第一个(按随机顺序)值,其键包含单词“日期”'

【讨论】:

反过来也可以吗?返回键而不是值? 当然,使用相同的语法,应该是:[k for k,v in my_dict.items() if 'Date' in k] 我可能不完全理解,但我觉得我快到了。 "for" 前面的内容将被返回。 没错。例如:>>> [4 for k,v in my_dict.items()] returns [4, 4, 4, 4] 我一直在使用这种类型的迭代器,但主要是复制过去,不知道它是如何返回我想要的。哈哈,非常感谢!!【参考方案2】:

您提供的片段创建了一个可从next 函数中的my_dict 项迭代的对象。然后它打印满足if 'Date' in k 条件的第一个值,即'15th july'

k, v 值是在创建可迭代对象时分配的(在您的情况下是 list)并表示键('name''age''Date of birth')和值('Klauss'、@987654331 @, '15th july') 分别。

【讨论】:

以上是关于我无法理解这个迭代器的主要内容,如果未能解决你的问题,请参考以下文章

迭代器和生成器

python笔记-4(装饰器生成器迭代器)

理解迭代器和可迭代对象

C++ 的STL中,迭代器那个指针为何++能指向下一个元素?

搞清楚 Python 的迭代器可迭代对象生成器

搞清楚 Python 的迭代器可迭代对象生成器