2016-03-23 19 views
-1

Was ist der beste Weg, die jeweils Werte im Wörterbuch mit heraus zu validieren mit beliebiger externen BibliothekenPython: Validieren jeweils Werte im Wörterbuch

for example dict = {"A":"some_string", 
        "B":12, 
        "C":83, 
        "D":56.......so on} 

Ich habe so zu bestätigen, dass, wenn Schlüssel A ist, dann sollte Wert sein string und wenn Schlüssel B dann sollte Wert int sein und reicht von 1 to 20 wenn Schlüssel C dann sollte Wert int sein und liegt im Bereich von 1 bis 100 so basierend auf Schlüssel, Validierung für Werte variiert auch ...

jeder kürzere Weg, es zu tun? mein Wörterbuch Größe ist riesig

+2

Wie viele Schlüssel gibt es? Und haben Sie ein Muster zwischen entsprechenden Wertvorstellungen? – niyasc

+1

Woher kommen diese Regeln? Ohne das ist es keine sehr gut definierte Frage. –

+2

Erstellen Sie ein anderes Wörterbuch mit Schlüssel zu Validierungsfunktionen zugeordnet und verwenden Sie so etwas wie 'Validierungen [Schlüssel] (Wert)' – Bahrom

Antwort

4

Hier ist ein Ansatz mit einem anderen Wörterbuch:

d = {"A":"some_string", 
    "B":12, 
    "C":83, 
    "D":56} 

# Map your validation functions to the keys 
validations = { 
    "A": lambda x: isinstance(x, str), 
    "B": lambda x: isinstance(x, int) and 1 <= x <= 20, 
    "C": lambda x: isinstance(x, int) and 1 <= x <= 100, 
} 

for k, v in d.items(): 
    print(validations.get(k, lambda x: False)(v)) # Default validation just returns False (invalid) 

Um zu überprüfen, ob das Wörterbuch gültig ist, könnten Sie verwenden:

print(all(validations.get(k, lambda x: False)(v) for (k, v) in d.items())) 
0

Lassen Sie uns sagen, dass Sie die erwarteten Typen in einem Wörterbuch zu definieren:

typeExpected = {'A':str, 'B':int} 

was bedeutet, dass die Taste A eine string und Schlüssel B sollte eine int enthalten enthalten sollte. Lassen Sie uns das Wörterbuch definieren Sie testen möchten, wie:

exampleData = {'A':'ok', 'B':0} 

Jetzt können Sie die Richtigkeit der Typen überprüfen, indem Sie: Ihre Daten

map(lambda x: type(exampleData[x]) == typeExpected[x], exampleData) 

dies versuchen und wenn Ihr Wörterbuch in der Tat zu groß ist, ist es Es wäre einfach, die Map in eine pool.map umzuwandeln, um in Multiprocessing zu arbeiten.