首页 > 解决方案 > 如何仅在python中需要时才解码

问题描述

我有一个混合数据集,其中一些是字符串,一些是字节,如下所示。

mydata={'data mining': [b'data', b'text mining', b"artificial intelligence"], 'neural networks': ['cnn', 'rnn', "artificial intelligence"]}

我的代码如下

for key, value in mydata.items():
    for item in value:
        print(type(item))

由于某些值是字节,我想将它们转换为字符串。因此,我对上述代码进行了以下更改。

for key, value in mydata.items():
    for item in value:
        print(type(item.decode("utf-8")))

但是,然后我收到一条错误消息;AttributeError: 'str' object has no attribute 'decode'

我也试过:

for key, value in mydata.items():
    for item in value:
        if type(item) == 'str':
            print(type(item))

但这对我不起作用。

有没有办法解决这个问题?

标签: pythondecode

解决方案


以下是评论中各种建议的实施。检查列表元素是否是字节对象,如果是则解码(由于字节对象是不可变的,我将列表元素替换为解码版本)。

mydata = {'data mining': [b'data', b'text mining', b'artificial intelligence'], 'neural networks': ['cnn', 'rnn', "artificial intelligence"]}

for items in mydata.values():
    for i, item in enumerate(items):
        if isinstance(item, bytes):
            items[i] = item.decode()

print(mydata)
# OUTPUT
# {'data mining': ['data', 'text mining', 'artificial intelligence'], 'neural networks': ['cnn', 'rnn', 'artificial intelligence']}

推荐阅读