2017-11-10 3 views
0

Arbeiten in einem interaktiven Modus, I-Eingang folgende Zuordnungen:isinstance() in dict Verständnis

item = ['keys', 'values', 'items'] 
get = ['get', 'setdefault'] 
pop = ['pop', 'popitem'] 
copy = ['copy', 'fromkeys'] 
update = ['update'] 
clear = ['clear'] 
# my intent result 
{'item': ['keys', 'values', 'items'], 
'get': ['get', 'setdefault'], 
'pop': ['pop', 'popitem'], 
'copy': ['copy', 'fromkeys'], 
'update': ['update'], 
'clear': ['clear']}} 

Ich beabsichtige, eine dict von ihnen aus locals() mit einem dict Verständnis zu holen und Kontrolle geben.

>>> locals() 
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'item': ['keys', 'values', 'items'], 'get': ['get', 'setdefault'], 'pop': ['pop', 'popitem'], 'copy': ['copy', 'fromkeys'], 'update': ['update'], 'clear': ['clear']} 

mein Code:

{k:v for k, v in locals().items if isinstance(v, list)} 
TypeError: 'builtin_function_or_method' object is not iterable 

ich es feste

In [12]: {k:locals[k] for k in locals() if isinstance(locals()[k], list)} 
#Error reports again. 
KeyError: '__name__' 

Wie es zu beheben?

+4

Ich wünschte, Sie würden finden etwas anderes als dies zu tun. Warum legen Sie diese nicht in Dicts, wie die Listen erstellt werden? Was ist, wenn in Ihrer Umgebung 10 weitere Listen vorhanden sind, die für das zu erstellende Wörterbuch nicht relevant sind? –

+1

+1 zu @ cᴏʟᴅsᴘᴇᴇᴅs Kommentar. Der Zugriff auf diese Eingaben von "Einheimischen" scheint keine gute Idee zu sein. Wenn Sie erklären, warum Sie es so machen, könnte jemand einen anderen/besseren Ansatz bieten. –

+1

Bug markiert: 'Artikel' zu' Artikel() ' –

Antwort

4

Durch Aufruf der Methode items():

{k:v for k, v in locals().items() if isinstance(v, list)} 

EDIT: Mit Einheimischen() wie folgt aus wie eine hässliche Hack klingt, es ist OK, es im interaktiven Modus zu verwenden, um herauszufinden, wie Python Store seine variable, aber Es ist definitiv keine gute Idee, es in "echtem Code" zu verwenden. Wenn Sie diese Parameter zusammen, denken Sie über eine Klasse zum Beispiel speichern müssen:

class MyKeywords: 
    def __init__(self): 
     self.item = ['keys', 'values', 'items'] 
     self.get = ['get', 'setdefault'] 
     self.pop = ['pop', 'popitem'] 
     self.copy = ['copy', 'fromkeys'] 
     self.update = ['update'] 
     self.clear = ['clear'] 

oder einen anderen Weg finden zu bekommen/lagern, wird Einheimischen definitiv nicht dafür gemacht :)

+1

Während Ihre Antwort die Frage an seinem Gesicht adressieren könnte, überspringt es das zugrundeliegende Problem, das das OP ist, das herauf einen Topf des stinkenden Codes einweicht, indem es "Einheimischen" überhaupt verwendet. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Sie haben Recht, die Verwendung von Einheimischen ist eine schlechte Idee, aber, das Problem OP war konfrontiert ist nicht direkt im Zusammenhang mit der Verwendung von Einheimischen (was schlecht ist :)), aber die meisten der Liste Verständnis. Ich werde eine Warnung in meiner Antwort hinzufügen :) –

+0

ty für die Tuturial –

Verwandte Themen