4 回答

TA貢獻1834條經驗 獲得超8個贊
def decode_dict(d, encoding_used = 'utf-8'):
return { k.decode(encoding_used) : (v.decode(encoding_used) if isinstance(v, bytes) else decode_dict(v, encoding_used)) for k, v in d.items() }
new_dict = decode_dict({b'mykey': {b'inner_key': b'inner_value'}})
print(new_dict)
如果您的編碼不是 UTF-8,則需要在調用中使用第二個參數。

TA貢獻1876條經驗 獲得超7個贊
使用像這樣的簡單字典,{b'inner_key': b'inner_value'}
您可以執行以下操作:
for k, v in list(d.items()): d[k.decode('utf8')] = d.pop(k).decode('utf8')
這需要擴展到可能存在嵌套字典的更一般情況。但是,它會就地修改字典,如果您不想創建另一個字典,這可能很有用。

TA貢獻1824條經驗 獲得超5個贊
我最后做了
def _convert_bytes_dict(data):
out = {}
for key, val in data.items():
if isinstance(val, list):
decoded_val = [_convert_bytes_dict(i) for i in val]
elif not hasattr(val, "items") and not hasattr(val, "decode"):
decoded_val = val
elif not hasattr(val, "items"):
decoded_val = val.decode("utf-8")
else:
decoded_val = _convert_bytes_dict(val)
out[key.decode("utf-8")] = decoded_val
return out
添加回答
舉報