2

我希望该集合是一个集合或一个字典。问题是:

for element in collection:
    print element

如果集合是一个集合,会给我元素,但如果集合是一个字典,就会给我索引。我想要的是一个可以迭代 dict 值的单行代码。

那可能吗?

4

3 回答 3

9

测试映射最简单的方法是使用isinstanceon 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):
于 2012-04-25T16:32:30.550 回答
1
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 对于将问题分解为可重用的部分非常有用。

于 2012-04-25T16:42:00.567 回答
-4

怎么样:

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

去告诉他们。

于 2012-04-25T16:48:54.013 回答