コレクションはセットまたは辞書のいずれかになると思います。問題は次のとおりです。
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
彼らに言いに行きなさい。