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.Mappingagfから提案をコピーしました。私の答えは、ソリューションを関数として実装することによって異なります。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 に答える