为什么从字典创建集合时会出错
Why does an error occur when creating a set from a dictionary
我试图在 python 控制台中执行以下基本语句,但我得到的是一条错误消息:
dict object is not callable
我执行的代码:
>>> test_dict = {1:"one",2:"two"}
>>> set3= set(test_dict)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'dict' object is not callable
我已经在网上查了一些问题,但直到现在都找不到和理解任何东西。
您可以从字典构造集合;该集合将被初始化为字典中的键集合。
但是,在你的例子中,名称 set
已经绑定到一个字典值,所以当你写 set
时,你不会得到内置集 class,而是那本词典。写入 set = __builtins__.set
以交互式 shell 恢复它。在一个程序中,在前面的代码中搜索set =
(或as set
)
您正在通过分配屏蔽内置 set
。
>>> set = {}
这使得 set
名称指向一个新的字典对象,您不能再将其用作创建新 set
对象的内置类型:
>>> test_dict = {1:"one", 2:"two"}
>>> set3 = set(test_dict)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'dict' object is not callable
不要屏蔽 built-in names,只需删除您创建的名称绑定,现在一切都会 运行 正常:
>>> del set # 'undos' the set={} binding
>>> set3 = set(test_dict)
>>> set3
{1, 2}
您发布的代码在 python3 和 python2 下 运行 没有问题。如果出现此错误,通常意味着您已将设置重新分配给另一个对象。您应该再次检查代码。
Python 2.7.9 (default, Apr 13 2015, 11:43:15)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.49)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test_dict = {1:"one",2:"two"}
>>> set3=set(test_dict)
>>> print set3
set([1, 2])
>>> set3.add(3)
>>> print set3
set([1, 2, 3])
>>> set3.pop()
1
并在 python3 中:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test_dict = {1:"one",2:"two"}
>>> set3=set(test_dict)
>>> print(set3)
{1, 2}
>>> set3.add(3)
>>> print(set3)
{1, 2, 3}
>>> set3.pop()
1
>>> print(set3)
{2, 3}
我试图在 python 控制台中执行以下基本语句,但我得到的是一条错误消息:
dict object is not callable
我执行的代码:
>>> test_dict = {1:"one",2:"two"}
>>> set3= set(test_dict)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'dict' object is not callable
我已经在网上查了一些问题,但直到现在都找不到和理解任何东西。
您可以从字典构造集合;该集合将被初始化为字典中的键集合。
但是,在你的例子中,名称 set
已经绑定到一个字典值,所以当你写 set
时,你不会得到内置集 class,而是那本词典。写入 set = __builtins__.set
以交互式 shell 恢复它。在一个程序中,在前面的代码中搜索set =
(或as set
)
您正在通过分配屏蔽内置 set
。
>>> set = {}
这使得 set
名称指向一个新的字典对象,您不能再将其用作创建新 set
对象的内置类型:
>>> test_dict = {1:"one", 2:"two"}
>>> set3 = set(test_dict)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'dict' object is not callable
不要屏蔽 built-in names,只需删除您创建的名称绑定,现在一切都会 运行 正常:
>>> del set # 'undos' the set={} binding
>>> set3 = set(test_dict)
>>> set3
{1, 2}
您发布的代码在 python3 和 python2 下 运行 没有问题。如果出现此错误,通常意味着您已将设置重新分配给另一个对象。您应该再次检查代码。
Python 2.7.9 (default, Apr 13 2015, 11:43:15)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.49)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test_dict = {1:"one",2:"two"}
>>> set3=set(test_dict)
>>> print set3
set([1, 2])
>>> set3.add(3)
>>> print set3
set([1, 2, 3])
>>> set3.pop()
1
并在 python3 中:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test_dict = {1:"one",2:"two"}
>>> set3=set(test_dict)
>>> print(set3)
{1, 2}
>>> set3.add(3)
>>> print(set3)
{1, 2, 3}
>>> set3.pop()
1
>>> print(set3)
{2, 3}