如何在python中访问字典的元素,其中键是字节而不是字符串



对不起,如果这是一个太多的菜鸟问题。

我有一个字典,其中键是字节(如b'access_token'(而不是字符串。

{
b'access_token': [b'b64ssscba8c5359bac7e88cf5894bc7922xxx'], 
b'token_type': [b'bearer']
}

通常我通过data_dict.get('key')访问字典的元素,但在这种情况下,我得到的是NoneType而不是实际值。

如何访问它们,或者有没有办法将此字节键控字典转换为字符串键控字典?

编辑:我实际上是通过解析像这样的查询字符串来获得这个字典access_token=absdhasd&scope=abcbyurllib.parse.parse_qs(string)

您可以使用str.encode()bytes.decode()在两者之间交换(可选,提供指定编码的参数。'UTF-8'是默认值(。作为一个 结果,你可以接受你的字典:

my_dict = {
b'access_token': [b'b64ssscba8c5359bac7e88cf5894bc7922xxx'], 
b'token_type': [b'bearer']
}

只需理解一下即可交换所有键:

new_dict = {k.decode(): v for k,v in my_dict.items()}
# {
#   'access_token': [b'b64ssscba8c5359bac7e88cf5894bc7922xxx'], 
#   'token_type': [b'bearer']
# }

同样,您可以在访问字典时使用.encode(),以便从字符串中获取字节对象:

my_key = 'access_token'
my_value = my_dict[my_key.encode()]
# [b'b64ssscba8c5359bac7e88cf5894bc7922xxx']

最有可能的是,你犯了一些愚蠢的错误。 它在我的测试中工作正常。
也许您在尝试索引字典时忘记添加前缀b

d={
b'key1': [b'val1'], 
b'key2': [b'val2']
}
d[b'key1']     # --> returns [b'val1']
d.get(b'key2') # --> returns [b'val2']

也许这可能是您正在寻找的东西?

dict = {
b'access_token': [b'b64ssscba8c5359bac7e88cf5894bc7922xxx'], 
b'token_type': [b'bearer']
}
print(dict.get( b'access_token'))

最新更新