2016-11-24 4 views
0

Ich habe eine Liste von Strings 'Spalten' und entsprechenden Daten Ergebnis 'Daten'. Wie kann ich Daten durchlaufen und überprüfen, ob meine Variablen die gleichen Werte wie Werte in der Datenliste haben?Match-Variable zur Liste basierend auf Variablenname

columns = ["username", "email", "admin", "alive"] 
data = ("john", "[email protected]", "True", "True") 

username = "john" 
email = "[email protected]" 
admin = False 
alive = True 

Ich möchte ein Ausgang wie bekommen: ["same", "different", "different", "same"]

Antwort

0

Es stellte sich heraus, dass ich nach einfachen eval() gesucht habe.

so einfach:

for i in data: 
    if i == eval(columns[data.index(i)]): 
    print("it's the same") 

hat den Trick

0
data = ("john", "[email protected]", "True", "True") 
# create a dict with key and values 
# its about readability 
input_data = {"username":"john", 
       "email" :"[email protected]", 
       "admin" : False, 
       "alive" : True} 

match_list = {} 

for expected, (k,v) in zip(data, input_data.items()): 
    if expected != str(v): 
    match_list[k] = "different" 
    else: 
    match_list[k] = "same" 

for k,v in match_list.items(): 
    print (k,v) 

#your expected answer ["same", "different", "different", "same"] 
#is ok but not really useful.... 
#now you will get a key for your diff 

username same 
email different 
alive same 
admin different 
+0

thx! aber in deinem Fall vergleichst du nur zwei Listen/dicts, die schön aufeinander liegen. Mein Fall ist, dass ich Variablen im Code verteilt habe, und ich möchte nach diesen Variablen auf der Grundlage von "Spalten" fragen. 'Spalten' können sich ändern, Benutzer kann eine weitere Spalte hinzufügen, so dass ich automatisch eine weitere Variable von meinem Code anfordern möchte – tmdag

1

die Sie interessieren,

data = ("john", "[email protected]", True, True) 
check_list = [username,email,admin,alive] 
output = ['same' if i == j else 'diffrent' for i,j in zip(data,check_list)] 

Ausgabe

[ 'same', ‚diffrent ',' anders ',' gleich ']

+0

Danke! Dies setzt voraus, dass check_list NICHT eine Liste von Strings, sondern Verweise auf Variablen ist. Jede Möglichkeit, es mit 'check_list = [" Benutzername "," E-Mail "," admin "," lebendig "] zu tun? – tmdag

0

Wenn Sie dies zu tun hat, kann zu vermeiden, sollten Sie. Wenn Sie es nicht vermeiden können, können Sie die Werte von Variablen mit Namen nachschlagen in locals()

Ihr Code:

columns = ["username", "email", "admin", "alive"] 
data = ("john", "[email protected]", "True", "True") 

username = "john" 
email = "[email protected]" 
admin = False 
alive = True 

Um die gewünschte Ausgabe zu erhalten:

['same' if str(i) == str(locals()[j]) else 'different' for i,j in zip(data, columns)] 

[ 'gleich', 'anders', 'anders', 'gleich']

Die Aufrufe an str werden benötigt, da "True" und True nicht identisch sind.

Verwandte Themen