python 如何只在需要时解码
How to decode only when it is necessary in 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))
但它对我不起作用。
有办法解决这个问题吗?
以下是评论中各种建议的实现。检查列表元素是否为 bytes 对象,如果是则进行解码(因为 bytes 对象是不可变的,我将用解码版本替换列表元素)。
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']}
我有一个混合数据集,其中一些是字符串,一些是字节,如下所示。
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))
但它对我不起作用。
有办法解决这个问题吗?
以下是评论中各种建议的实现。检查列表元素是否为 bytes 对象,如果是则进行解码(因为 bytes 对象是不可变的,我将用解码版本替换列表元素)。
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']}