簡體   English   中英

如何訪問 python 中的字典元素,其中鍵是字節而不是字符串

[英]How to access elements of a dictionary in python where the keys are bytes instead of strings

對不起,如果這是一個太多的菜鳥問題。

我有一本字典,其中的鍵是字節(如b'access_token' )而不是字符串。

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

通常我通過data_dict.get('key')訪問字典的元素,但在這種情況下,我得到的是NoneType而不是實際值。

我如何訪問它們,或者有沒有辦法將此字節鍵控字典轉換為字符串鍵控字典?

編輯:我實際上是通過urllib.parse.parse_qs(string)解析像access_token=absdhasd&scope=abc這樣的查詢字符串得到這個字典

您可以使用str.encode()bytes.decode()在兩者之間進行交換(可選地,提供一個指定編碼的參數。 'UTF-8'是默認值)。 因此,您可以使用您的 dict:

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']
# }

同樣,您可以在訪問 dict 時使用.encode()以從字符串中獲取字節 object :

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'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM