Python 检索';内置&x27;按类型分别

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

我尝试通过以下步骤按类型检索内置项

首先,使用“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,
 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)
这恰好比第一个解决方案更有效率