有没有一种通用的方法可以得到一个迭代器,它总是迭代字典或其他iterable(列表,集合…)的值(最好,虽然它也可以迭代键)?在
让我详细说明一下:当您执行“iter(list)
”时,您会得到一个值的迭代器(而不是索引,这听起来非常类似于字典中的“key”),但是当您执行“iter(dict)
”时,您得到了键。在
是否有指令、属性。。。无论什么。。。它总是迭代iterable的值(或键),不管它是什么类型的iterable?在
我有一个带有“append”方法的代码,它需要接受几种不同类型的iterable类型,而我唯一能想到的解决方案是这样的:
#!/usr/bin/python2.4
class Sample(object):
def __init__(self):
self._myListOfStuff = list()
def addThings(self, thingsToAdd):
myIterator = None
if (isinstance(thingsToAdd, list) or
isinstance(thingsToAdd, set) or
isinstance(thingsToAdd, tuple)):
myIterator = iter(thingsToAdd)
elif isinstance(thingsToAdd, dict):
myIterator = thingsToAdd.itervalues()
if myIterator:
for element in myIterator:
self._myListOfStuff.append(element)
if __name__ == '__main__':
sample = Sample()
myList = list([1,2])
mySet = set([3,4])
myTuple = tuple([5,6])
myDict = dict(
a= 7,
b= 8
)
sample.addThings(myList)
sample.addThings(mySet)
sample.addThings(myTuple)
sample.addThings(myDict)
print sample._myListOfStuff
#Outputs [1, 2, 3, 4, 5, 6, 7, 8]
我不知道。。。看起来有点。。。我觉得笨手笨脚的
如果能为这种情况提供一个通用的迭代器,那就太好了,这样我就可以写一些类似。。。在
^{pr2}$。。。如果迭代器总是给出值,或者。。。在
def addThings(self, thingsToAdd):
for element in iter(thingsToAdd):
self._myListOfStuff.append(thingsToAdd[element])
。。。为什么我更喜欢迭代键集合中的键(如果我知道它是一个特殊的,而不是返回的键)。。。也许它可以返回存储值的哈希值)。在
Python中有这样的东西吗?(顺便说一下,我必须用Python2.4)
提前谢谢大家
大多数集合没有概念或“键”或“值”。它们只存储项目,迭代这些项目就可以得到这些项目。只有映射(dict like)提供“键”和“值”。迭代它们的默认方式是使用键,因为}相反)。因此,没有方法只对值进行迭代,因为最少的集合具有称为“值”的内容。在
for x in collection: assert x in collection
应该是一个不变量((key, value) in d
很少有意义,与{但是,您可以选择忽略映射中的键。由于您必须使用Python2.4,所以使用ABCs是不可能的。。。我担心最简单的方法是:
^{1}$它仍然可以中断,但可以处理dict和类似的映射。在
您要寻找的是
^{1}$dict.items()
方法,它返回(key,value)元组。 下面是一个用法示例:正如你所想象的那样
^{pr2}$编辑:如果您想得到一个真正的迭代器而不仅仅是一个序列,您还可以使用
dict.iteritems()
方法,它的工作原理是一样的。在Edit2:似乎我误解了您的问题,因为您似乎要求的是一个可以处理任何iterable的通用函数,忘了我的答案;-)
我不知道有什么东西能做到这一点。我想你可以做些类似的事情:
^{1}$相关问题 更多 >
编程相关推荐