什么时候用字典 | (合并)与 |=(更新)运算符
When to use dictionary | (merge) vs |= (update) operator
何时在字典上使用合并与更新运算符。
以下示例,虽然调用方式有所不同,但输出是相同的。
a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}
使用更新运算符
z = a | b
print(z)
Output: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
使用合并运算符
a |= b
print(a)
Output: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
好像是唯一的优点了| (合并)是它不会覆盖你的旧字典。
还有什么我想念的吗?
我应该在什么时候选择使用其中一种?
|=
运算符只是用联合运算的结果更新您的原始字典。 |
operator returns a new dictionary 是两个字典的并集。假设我们有两组
a = {'hello', 'world', 'abc', 'def'}
b = {'abc', 'ghi', 'jkl'}
操作 a |= b
与 a = a | b
的相似之处与 a += b
与列表的 a = a + b
相似。
a = {'hello', 'world', 'abc', 'def'}
al = list(a)
b = {'abc', 'ghi', 'jkl'}
bl = list(b)
print("Before: ", hex(id(a)), a)
a = a | b
print("After: ", hex(id(a)), a)
# Output:
# Before: 0x1aa0186f128 {'world', 'def', 'abc', 'hello'}
# After: 0x1aa0186f828 {'world', 'ghi', 'hello', 'jkl', 'def', 'abc'}
print("Before: ", hex(id(al)), al)
al = al + bl
print("After: ", hex(id(al)), al)
# Output:
# Before: 0x1aa0187a248 ['world', 'def', 'abc', 'hello']
# After: 0x1aa0366bdc8 ['world', 'def', 'abc', 'hello', 'jkl', 'abc', 'ghi']
显然,a
现在是内存中不同位置的 新集合。
a = {'hello', 'world', 'abc', 'def'}
al = list(a)
b = {'abc', 'ghi', 'jkl'}
bl = list(b)
print("Before", hex(id(a)), a)
a |= b
print("After", hex(id(a)), a)
# Output:
# Before 0x1aa0186f128 {'world', 'def', 'abc', 'hello'}
# After 0x1aa0186f128 {'world', 'ghi', 'hello', 'jkl', 'def', 'abc'}
print("Before", hex(id(al)), al)
al += bl
print("After", hex(id(al)), al)
# Output:
# Before 0x1aa03646888 ['world', 'def', 'abc', 'hello']
# After 0x1aa03646888 ['world', 'def', 'abc', 'hello', 'jkl', 'abc', 'ghi']
在这种情况下,a
仍然是内存中同一位置的 旧集,但其内容已更新。
何时在字典上使用合并与更新运算符。
以下示例,虽然调用方式有所不同,但输出是相同的。
a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}
使用更新运算符
z = a | b
print(z)
Output: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
使用合并运算符
a |= b
print(a)
Output: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
好像是唯一的优点了| (合并)是它不会覆盖你的旧字典。
还有什么我想念的吗?
我应该在什么时候选择使用其中一种?
|=
运算符只是用联合运算的结果更新您的原始字典。 |
operator returns a new dictionary 是两个字典的并集。假设我们有两组
a = {'hello', 'world', 'abc', 'def'}
b = {'abc', 'ghi', 'jkl'}
操作 a |= b
与 a = a | b
的相似之处与 a += b
与列表的 a = a + b
相似。
a = {'hello', 'world', 'abc', 'def'}
al = list(a)
b = {'abc', 'ghi', 'jkl'}
bl = list(b)
print("Before: ", hex(id(a)), a)
a = a | b
print("After: ", hex(id(a)), a)
# Output:
# Before: 0x1aa0186f128 {'world', 'def', 'abc', 'hello'}
# After: 0x1aa0186f828 {'world', 'ghi', 'hello', 'jkl', 'def', 'abc'}
print("Before: ", hex(id(al)), al)
al = al + bl
print("After: ", hex(id(al)), al)
# Output:
# Before: 0x1aa0187a248 ['world', 'def', 'abc', 'hello']
# After: 0x1aa0366bdc8 ['world', 'def', 'abc', 'hello', 'jkl', 'abc', 'ghi']
显然,a
现在是内存中不同位置的 新集合。
a = {'hello', 'world', 'abc', 'def'}
al = list(a)
b = {'abc', 'ghi', 'jkl'}
bl = list(b)
print("Before", hex(id(a)), a)
a |= b
print("After", hex(id(a)), a)
# Output:
# Before 0x1aa0186f128 {'world', 'def', 'abc', 'hello'}
# After 0x1aa0186f128 {'world', 'ghi', 'hello', 'jkl', 'def', 'abc'}
print("Before", hex(id(al)), al)
al += bl
print("After", hex(id(al)), al)
# Output:
# Before 0x1aa03646888 ['world', 'def', 'abc', 'hello']
# After 0x1aa03646888 ['world', 'def', 'abc', 'hello', 'jkl', 'abc', 'ghi']
在这种情况下,a
仍然是内存中同一位置的 旧集,但其内容已更新。