检查项目是否在字典中并且使用Python是真的

时间:2017-09-03 13:23:59

标签: python python-3.x

我收到了一个JSON字典,我想检查某些密钥是否存在且是真的

我会检查他们是否使用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"}

澄清:我只需要知道他们是不是真的还是假的。

编辑:感谢您的回复,我可以接受其中任何一个,但我接受了解释我做错了的那个。

5 个答案:

答案 0 :(得分:5)

and True只检查..好吧,没有,因为TrueTruei in incoming_json and incoming_json[i]会检查incoming_json中表示的键值是否为True(或评估为True的值)。

如果您确实要检查布尔值True(而不是1等),请使用incoming_json[i] is True

答案 1 :(得分:4)

您只需使用incoming_json.get(i)即可返回密钥的值,如果不存在,则None如下:

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

只有在字典中不存在值或值为False

时,才会返回False

答案 2 :(得分: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]]

答案 3 :(得分: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

答案 4 :(得分:1)

您可以尝试这样:

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