我有一个OrderedDict,在一个循环中我想得到索引、键和值。 这肯定可以通过多种方式来完成,即
a = collections.OrderedDict({…})
for i,b,c in zip(range(len(a)), a.iterkeys(), a.itervalues()):
…
但我想避开range(len(a))并将a.iterkeys()、a.itervalues()缩短为a.iteritems()之类的值。 使用枚举和iteritems,可以将
for i,d in enumerate(a.iteritems()):
b,c = d
但它需要在循环体内部解包。 有没有一种方法可以在for语句中解包,或者可能有一种更优雅的迭代方法?
可以在^{} statement 中使用元组解包:
旁注:
在Python 3.x中,使用^{} 返回一个iterable字典视图。
使用方法
values
或items
获得view
,然后将其设置为iterator
:例如,按字典中的值排序
是丑陋的,如果你问我的话。
我不知道你为什么对索引感兴趣。 迪克特之间的想法是你要对索引一无所知。 dict和队列背后有很多逻辑,这样我们就不用索引了。
如果坚持要获取索引,则不需要重复两次。
让我们看看枚举对列表做了什么:
注意“开始”。
枚举知道如何管理列表。字典将数据存储为一个列表,放在野兽的肚子里。那么,如果我们在一个dict上使用枚举,会发生什么呢?
在这种情况下,我会选择优雅的:
我觉得“对我来说,(k,v)in”太快暴露了太多的内在结构。 有了“for i,k in”,我们就得到了保护,当需要重构时,我们不需要接触循环的方式。我们只需要改变我们在循环中所做的事情。少了一个需要注意的方面。
更不用说这个枚举调用在2.6之后的任何python中的工作方式都是一样的:)
https://docs.python.org/2/library/stdtypes.html#dict.iteritems
https://docs.python.org/2/library/functions.html#enumerate
相关问题 更多 >
编程相关推荐