Ich importiere ein Modul, das nur mehrere Wörterbücher enthält. Wie kann ich darüber iterieren? Etwas in der Art von

import moduleX as data
for d in data:
    do stuff with d

Dies funktioniert offensichtlich nicht, da das Modul nicht iterierbar ist. Gibt es eine Möglichkeit, alle Dikte aus dem Modul als Sammlung zu extrahieren und diese Sammlung zu durchlaufen?

1
chrise 10 Okt. 2012 im 13:15

4 Antworten

Beste Antwort

Meine Antwort:

import moduleX as data

for k, v in data.__dict__.iteritems():
    if isinstance(v, dict) and not k.startswith('_'):
        # do something
        pass
3
Brōtsyorfuzthrāx 15 Jän. 2016 im 04:37

Sie können vars(object) verwenden:

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")
0
Kashif Siddiqui 24 Jän. 2017 im 02:43

Meine 2-Cent-Lösung:

>>> for item in dir(data):
...     print item
...     if eval('type(t.'+item+')') is dict: print item, "is a dict"
... 

Oder besser:

>>> for item in dir(data):
...     if eval('isinstance(data.'+item+', dict)') and not item.startswith('_'): 
            print item , "is a dict"
... 
0
Oz123 10 Okt. 2012 im 09:37

Hast du es versucht:

for k,v in data.__dict__.items():
    if isinstance(v,dict) and k not in __builtins__:
        pass
0
root 10 Okt. 2012 im 09:42