2016-10-18 9 views
3

私はこれに関する文書を見つけることができませんでしたので、ここで質問します。dict.keys()の `or`演算子

以下のコードに示されているように、私はorオペレータ(|)は、のような働いたことが判明:私は最初

2 d 11 a b e 
3 1 2 a b 
10 e 11 12 d 

a = {"a": 1,"b": 2, 2: 3} 
b = {"d": 10, "e": 11, 11: 12} 

keys = a.keys() | b.keys() 
aonce = a.keys() | a.values() 
bonce = b.keys() | b.values() 

for i in keys: 
    print(i, end=" ") 
print() 
for i in aonce: 
    print(i, end=" ") 
print() 
for i in bonce: 
    print(i, end=" ") 
print() 

いくつかのために、結果を生成しますこれらのイテラブルは|と互換性があり、ウェイセットと同様であると仮定しています。 list.__iter__()のような他の繰り返し可能なテストでは、エラーが発生しました。偶数;私が原因前述の例のdict.values()の使用に、働いていたと仮定したい

values = a.values() | b.values() 
for i in values: 
    print(i, end=" ") 
print() 

、エラーを投げました。

私の質問は次のとおりです。私は何を地球にもたらしましたか、さらに重要なのは、どれほど信頼できるのでしょうか?私の議論は、私がこれを使用できるようにするためには、どんなサブクラスですか?

答えて

5

Python 3 Documentationは、dict.keysメソッドが設定されており、collections.abc.Setを実装していることに注意してください。

aonce = a.keys() | a.values() 
bonce = b.keys() | b.values() 

しかしこれらは、キーが実装__or__(および__ror__)を表示するという事実をオフに活用されていますdict.valuesある設定に似ていないことをを、あなたの例でそうであるように見える場合でも

注意任意のイテラブルに対して。

例えば、以下は動作しません。

>>> a.values() | b.values() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for |: 'dict_values' and 'dict_values' 
関連する問題