2017-09-03 52 views
2

我收到一個JSON字典,並且我想檢查某些鍵是否存在並且是真的檢查項目是否在字典中,並且使用Python是否爲真

我檢查他們是否使用all(i in incoming_json for i in ['title', 'code', 'university', 'lecturer']),但我堅持檢查它們是否屬實。

我試過all(i in incoming_json and True for i in ['title', 'code', 'university', 'lecturer'])all(i in incoming_json for i in ['title', 'code', 'university', 'lecturer'] if i),但他們似乎沒有任何區別。

我在做什麼錯?

例JSON:

{title: "Example title", code: "1234", university: "2", lecturer: "John Doe"}

澄清:我只需要知道,如果他們truthy或falsy。

編輯:謝謝你的回覆,我可以接受他們中的任何一個,但我接受了解釋我做錯了什麼的。

+0

包括你recieving –

回答

5

and True只是檢查..好吧,沒什麼,因爲TrueTruei in incoming_json and incoming_json[i]將檢查incoming_json中代表的密鑰值是否也爲真(或評估值爲True)。

如果您確實想要檢查布爾值True(而不是1等),請使用incoming_json[i] is True

+0

我得到了很多優秀的響應JSON,但這個回答我的問題是最好的。 – km6

1

你可以試試這個:

l = ['title', 'code', 'university', 'lecturer'] 
d = {title: "Example title", code: "1234", university: "2", lecturer: "John Doe"} 

new_l = [i for i in l if i in d and d[i]] 
+1

'和i'正在測試這些密鑰,並且OP想要測試這些值。 – DSM

+0

@DSM請看我最近的編輯。 – Ajax1234

+1

該列表理解是..不太可讀。 :-) – MatsLindh

4

您可以簡單地使用incoming_json.get(i)將返回鍵或None的值,如果它不爲以下存在:

all(incoming_json.get(i) for i in ['title', 'code', 'university', 'lecturer']) 

這將返回False只有當字典中不存在該值或者該值爲False

+0

或者只是'incoming_json.get(i)',因爲'None'是虛假的。 – ekhumoro

+0

@ekhumoro True :-) –

1

您可以使用此:

incoming_json = {"title": "Example title", "code": "1234", "university": "2", "lecturer": "John Doe"} # the json 

keys = ['title', 'code', 'university', 'lecturer'] # the keys 

test = all(i in incoming_json and incoming_json[i] for i in keys) # if key in json keys and it's truthy 

print(test) # True 
+0

我不知道我關注。 'all'和'and'短路。爲什麼添加三個'not's? – DSM

+0

@DSM是的,我記得讀到,因爲所有和任何函數,無論如何所有的參數將被評估,所以任何或全部,只是相同。 –

1

你可以嘗試這樣的:

all(incoming_json[i] if i in incoming_json else False for i in ['title', 'code', 'university', 'lecturer']) 
相關問題