Как декодировать только тогда, когда это необходимо в Python - PullRequest
0 голосов
/ 23 января 2019

У меня есть смешанный набор данных, где некоторые из них в виде строк, а некоторые в байтах, как показано ниже.

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

Но у меня это не сработало.

Есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 23 января 2019

Ниже приведена реализация различных предложений в комментариях. Проверьте, является ли элемент списка байтовым объектом, и декодируйте, если это так (поскольку байтовые объекты неизменны, я заменяю элемент списка декодированной версией).

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']}
...