我无法理解这个迭代器
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'
) 分别。
【讨论】:
以上是关于我无法理解这个迭代器的主要内容,如果未能解决你的问题,请参考以下文章