使用Python dict

时间:2018-04-06 00:49:18

标签: python python-3.x

我有以下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语句错误。检查有效负载内部是否有“令牌”的正确方法是什么?

3 个答案:

答案 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