我收到了一个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"}
澄清:我只需要知道他们是不是真的还是假的。
编辑:感谢您的回复,我可以接受其中任何一个,但我接受了解释我做错了的那个。
答案 0 :(得分:5)
and True
只检查..好吧,没有,因为True
是True
。 i 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'])