Python 检索';内置&x27;按类型分别
我尝试通过以下步骤按类型检索内置项 首先,使用“set”检索Python 检索';内置&x27;按类型分别,python,Python,我尝试通过以下步骤按类型检索内置项 首先,使用“set”检索内置文件中的所有类型 total_builtins = dir(__builtins__) total_types = {type(eval(i)) for i in total_builtins} In [95]: total_types Out[95]: {NoneType, NotImplementedType, _sitebuiltins._Helper, _sitebuiltins._Printer, bool, b
内置文件中的所有类型
total_builtins = dir(__builtins__)
total_types = {type(eval(i)) for i in total_builtins}
In [95]: total_types
Out[95]:
{NoneType,
NotImplementedType,
_sitebuiltins._Helper,
_sitebuiltins._Printer,
bool,
builtin_function_or_method,
ellipsis,
function,
method,
str,
type}
#Subtract type of 'type'
total_types = total_types.pop()
In [120]: len(total_types)
Out[120]: 10
第二组使用dict对他们进行分组
In [117]: {mytype:[i for i in total_bins if isinstance(eval(i), mytype)]
for mytype in total_types}
Out[117]:
{NoneType: ['None', '__loader__', '__package__', '__spec__'],
NotImplementedType: ['NotImplemented'],
_sitebuiltins._Helper: ['help'],
_sitebuiltins._Printer: ['copyright', 'credits', 'license'],
bool: ['False', 'True', '__IPYTHON__', '__debug__'],
builtin_function_or_method: ['__build_class__',
'__import__',
....],
ellipsis: ['Ellipsis'],
function: ['display'],
method: ['get_ipython'],
str: ['__doc__', '__name__']}
这确实产生了期望的结果,但对于任务来说看起来有点太多(尤其是多重嵌套理解)
如何以智能的方式解决这样的问题?IIUC,您可以迭代\uuuuuu内置\uuuuuuu.\uuuuu dict\uuuuuu
。尽管如此,你还是需要把字典翻过来
d = {k : type(v) for k, v in builtins.__dict__.items()}
d2 = {}
for k, v in d.items():
d2.setdefault(v, []).append(k)
类似的解决方案具有集合。defaultdict
-
from collections import defaultdict
d = {k : type(v) for k, v in builtins.__dict__.items()}
d2 = defaultdict(list)
for k, v in d.items():
d2[v].append(k)
这恰好比第一个解决方案更有效率 IIUC,您可以在\uuuuuuu内置\uuuuuu.\uuuuuu dict\uuuu
上进行迭代。尽管如此,你还是需要把字典翻过来
d = {k : type(v) for k, v in builtins.__dict__.items()}
d2 = {}
for k, v in d.items():
d2.setdefault(v, []).append(k)
类似的解决方案具有集合。defaultdict
-
from collections import defaultdict
d = {k : type(v) for k, v in builtins.__dict__.items()}
d2 = defaultdict(list)
for k, v in d.items():
d2[v].append(k)
这恰好比第一个解决方案更有效率