Python 在模块中迭代字典
我导入了一个只包含几个字典的模块。我如何迭代这些? 类似于Python 在模块中迭代字典,python,iteration,Python,Iteration,我导入了一个只包含几个字典的模块。我如何迭代这些? 类似于 import moduleX as data for d in data: do stuff with d 这显然不起作用,因为模块不可移植。是否有一种方法可以将模块中的所有DICT提取为一个集合,并遍历该集合?您是否尝试过: for k,v in data.__dict__.items(): if isinstance(v,dict) and k not in __builtins__: pass
import moduleX as data
for d in data:
do stuff with d
这显然不起作用,因为模块不可移植。是否有一种方法可以将模块中的所有DICT提取为一个集合,并遍历该集合?您是否尝试过:
for k,v in data.__dict__.items():
if isinstance(v,dict) and k not in __builtins__:
pass
我的2美分解决方案:
>>> for item in dir(data):
... print item
... if eval('type(t.'+item+')') is dict: print item, "is a dict"
...
或者更好:
>>> for item in dir(data):
... if eval('isinstance(data.'+item+', dict)') and not item.startswith('_'):
print item , "is a dict"
...
我的答覆是:
import moduleX as data
for k, v in data.__dict__.iteritems():
if isinstance(v, dict) and not k.startswith('_'):
# do something
pass
您可以使用变量(对象)
:
多谢了,奥兹,这就是我要找的20美分。eval('data.'+项)现在为我提供object@user1734278,我对我的答案进行了一些扩展,因此它更具可读性。@Oz123:
eval('isinstance(data.+item+',dict)
写得更好isinstance(getattr(data,item,None),dict)
eval
几乎从来都不是正确的答案。@MatthewTrevor,谢谢你的评论,我不知道你能做到。为什么最后需要None
?如果属性不存在,则返回的默认值为@Oz123:None
。如果没有它,您将得到一个属性错误
。也可以工作,但我对输出有点困惑,因为我也得到了一些内置的输出。本来只会得到口授证书的。我可能误解了python在这里所做的事情,或者这个命令似乎有点误导您可以在内置中使用k not来过滤这些。对不起,我忘了提到我正在3.x上运行这个命令。Iteritems()似乎已经从中脱离出来了one@user1734278在Python 3上使用.items()
。
import the_module_with_dictionaries as my_mod
#Get just names of defined dictionaries
for case in vars(my_mod):
print(case)
#Get the values in those dictionaries
for case in vars(my_mod).values():
print(case)
if isinstance(case, dict):
print("Yay found a dict")