如何仅在python中有必要时解码

如何仅在python中有必要时解码,python,decode,Python,Decode,我有一个混合数据集,其中一些是字符串,一些是字节,如下所示 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(t

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

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")))
然而,我得到了一个错误的说法<代码>属性错误:“str”对象没有属性“decode”

我还尝试:

for key, value in mydata.items():
    for item in value:
        if type(item) == 'str':
            print(type(item))
但这对我不起作用


有办法解决这个问题吗?

以下是评论中各种建议的实施情况。检查list元素是否是bytes对象,如果是,则进行解码(因为bytes对象是不可变的,所以我将用解码版本替换list元素)


您总是可以
尝试:。。。捕获属性错误:…
,否?更好的是,我会先处理给你这些混乱数据的任何东西。但是你可以很容易地清理它。“有办法解决这个问题吗?”检查数据类型,如果它是字符串,就不要调用deode?我同意第一条评论:你的数据表示很混乱,所以你不应该首先创建这样的表示。如果您从不同的来源获取数据(这就是表示方式不同的原因),那么对于每个来源,您应该知道如何将数据转换为统一格式(并在添加到数据结构之前进行转换)。
键入(项)=='str'
正在检查类/类型对象是否等于
str
对象
'str'
,但这永远不会发生。你可以做
type(item)==str
或者
type(item)是str
,或者更习惯地说,
isinstance(item,str)
。当然,您也可以使用
尝试,但
除外。
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']}