为什么从字典创建集合时会出错

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}