我希望该集合是一个集合或一个字典。问题是:
for element in collection:
print element
如果集合是一个集合,会给我元素,但如果集合是一个字典,就会给我索引。我想要的是一个可以迭代 dict 值的单行代码。
那可能吗?
我希望该集合是一个集合或一个字典。问题是:
for element in collection:
print element
如果集合是一个集合,会给我元素,但如果集合是一个字典,就会给我索引。我想要的是一个可以迭代 dict 值的单行代码。
那可能吗?
测试映射最简单的方法是使用isinstance
on collections.Mapping
:
import collections
for element in (collection.values()
if isinstance(collection, collections.Mapping) else collection):
如果你需要经常这样做(你不应该这样做,或者你可能有设计问题),你可以把它移到一个函数中:
def values(collection):
return (collection.values()
if isinstance(collection, collections.Mapping) else collection)
for element in values(collection):
import collections
def values(collection):
for v in collection.values() if isinstance(collection, collections.Mapping) else collection:
yield v
for element in values(collection):
print element
编辑:我collections.Mapping
从 agf 复制了建议。我的答案因将解决方案实现为函数而有所不同。我发现 Python 对于将问题分解为可重用的部分非常有用。
怎么样:
def vals(c):
try: return c.values()
except: return c
for a in vals(whatever):
...
特别是对于那些被洗脑的人除了是“坏习惯”之外:
find "/System/Library/Frameworks/Python.framework" -name "*.py" | xargs grep "except:" | wc -l
2901
去告诉他们。