dict.keys() 上的“或”运算符
The `or` operator on dict.keys()
因为一直找不到这方面的资料,所以在这里问一下。
如下面的代码所示,我发现 or
运算符 (|
) 是这样工作的:
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()
按某种顺序生成结果:
2 d 11 a b e
3 1 2 a b
10 e 11 12 d
最初我假设这些 iterable 与 |
兼容,但是类似于集合的方式。使用其他可迭代对象(例如 list.__iter__()
)进行测试会引发错误。甚至;
values = a.values() | b.values()
for i in values:
print(i, end=" ")
print()
由于在前面的示例中使用了 dict.values()
,我认为它是有效的,但抛出了一个错误。
所以,我的问题是;我到底遇到了什么,更重要的是,它的可靠性如何?我的参数需要是什么子类才能使用它?
Python 3 Documentation notes that the dict.keys
method is set-like and implements collections.abc.Set
.
请注意,dict.values
不是集合 ,尽管在您的示例中它可能看起来是这样:
aonce = a.keys() | a.values()
bonce = b.keys() | b.values()
然而,这些利用了键视图在任意迭代器上实现 __or__
(和 __ror__
)这一事实。
例如,以下将不起作用:
>>> 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'
因为一直找不到这方面的资料,所以在这里问一下。
如下面的代码所示,我发现 or
运算符 (|
) 是这样工作的:
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()
按某种顺序生成结果:
2 d 11 a b e
3 1 2 a b
10 e 11 12 d
最初我假设这些 iterable 与 |
兼容,但是类似于集合的方式。使用其他可迭代对象(例如 list.__iter__()
)进行测试会引发错误。甚至;
values = a.values() | b.values()
for i in values:
print(i, end=" ")
print()
由于在前面的示例中使用了 dict.values()
,我认为它是有效的,但抛出了一个错误。
所以,我的问题是;我到底遇到了什么,更重要的是,它的可靠性如何?我的参数需要是什么子类才能使用它?
Python 3 Documentation notes that the dict.keys
method is set-like and implements collections.abc.Set
.
请注意,dict.values
不是集合 ,尽管在您的示例中它可能看起来是这样:
aonce = a.keys() | a.values()
bonce = b.keys() | b.values()
然而,这些利用了键视图在任意迭代器上实现 __or__
(和 __ror__
)这一事实。
例如,以下将不起作用:
>>> 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'