我有以下Python dict。我正在尝试使用n if语句检查有效负载是否包含“token”
{'payload': {'token': '3u4td7393493d9304'}, 'type': 'send'}
下面是python代码
if message['payload'] == 'token':
print("GOT IT");
print(message)
elif message['payload']['type'] == 'timedout':
print("TIMEDOUT!")
elif message['payload'] == 'locked':
print("LOCKED!")
done.set()
令牌的当前if语句错误。检查有效负载内部是否有“令牌”的正确方法是什么?
答案 0 :(得分:2)
要检查字典d
是否包含密钥k
,请使用k in d
:
message = {'payload': {'token': '3u4td7393493d9304'}, 'type': 'send'}
# {'payload': {'locked': 'lockId'}, 'type': 'send'}
if 'token' in message['payload']:
print("GOT IT");
print(message)
print(f"token: {message['payload']['token']}")
elif message['type'] == 'timedout':
print("TIMEDOUT!")
elif 'locked' in message['payload']:
print("LOCKED!")
print(f"locked value: {message['payload']['locked']}")
# done.set()
由于您有嵌套字典,message['payload']
本身就是字典,因此要检查它是否有密钥'token'
,您必须使用'token' in message['payload']
。
我还添加了一个示例,演示了如何访问与键'token'对应的值。
旁注:此if-else
似乎并不详尽,而且缺少默认情况。也许你应该更系统地处理它,首先要确保你处理消息的每一个type
,然后对每种type
处理每种有效负载。
答案 1 :(得分:1)
我理解你的问题的方式是你想要找出有效载荷中是否存在'token'而不管令牌值是什么?
如果是,数组中的简单就足够了:
dc = {'payload': {'token': '3u4td7393493d9304'}, 'type': 'send'}
'token' in dc['payload'] # this would result in True
答案 2 :(得分:0)
只需要创建一个返回True或False的函数,现在只要你想检查该函数的传递值并检查:
def check_token(data_):
if 'token' in data_['payload']:
return True
else:
return False
现在回到您的代码,您可以通过将值传递给此函数来进行检查:
if check_token(data)==True:
print("GOT IT")
输出:
GOT IT