2016-11-24 7 views
0

私は文字列 'columns'とそれに対応するデータ結果 'data'のリストを持っています。 データを繰り返し処理し、変数にデータリストの値と同じ値が設定されているかどうかを確認するにはどうすればよいですか?変数名に基づいてリストする変数を一致させる

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

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

私のような出力を取得したいと思います:["same", "different", "different", "same"]

答えて

0

私は単純なeval()を探していました。

非常にシンプル:あなたがこれを行うことを避けることができる場合

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

トリック

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!あなたのケースでは、2つのリスト/ディクテーションをお互いにうまくレイアウトして比較しているだけです。私の場合、私は変数がコード内に広がっているので、それらの変数を '列'に基づいて尋ねたいと思います。 '列'が変更される可能性があるため、ユーザーは別の列を追加して、自動的に別の変数を私のコードから要求します – tmdag

1

はこれを試してみてください、

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)] 

出力

[ '同じ'、「切り抜い'、' diffrent '、'同じ]]

+0

ありがとう!これは、check_listが文字列のリストではなく、変数への参照であると仮定しています。 'check_list = [" username "、" email "、" admin "、" alive "]'でそれを行う可能性はありますか? – tmdag

0

をした、あなたがする必要があります。 [

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

:あなたの所望の出力を得るために

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

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

:あなたはそれを避けることができない場合は、locals()

あなたのコード内の名前で変数の値を調べることができます'同じ'、 '異なる'、 '異なる'、 '同じ']

0123への呼び出し"True"Trueは同じではないため、が必要です。

関連する問題