为了账号安全,请及时绑定邮箱和手机立即绑定

我有一个字典,其中所有元素都是字节。我怎样才能得到字符串的字典?

我有一个字典,其中所有元素都是字节。我怎样才能得到字符串的字典?

慕尼黑8549860 2022-12-27 15:50:20
示例 - 我有一个这样的字典:{b'mykey': {b'inner_key': b'inner_value'}}如何将其转换为字符串和值均为字符串的字典?
查看完整描述

4 回答

?
MMMHUHU

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,则需要在调用中使用第二个参数。


查看完整回答
反对 回复 2022-12-27
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

使用解码:

b'somestring'.decode('utf-8')


查看完整回答
反对 回复 2022-12-27
?
幕布斯6054654

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

这需要扩展到可能存在嵌套字典的更一般情况。但是,它会就地修改字典,如果您不想创建另一个字典,这可能很有用。


查看完整回答
反对 回复 2022-12-27
?
沧海一幻觉

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


查看完整回答
反对 回复 2022-12-27
  • 4 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信