Как кодировать словарь python?
Я хочу закодировать образец материала, показанный ниже:
name = "Myname"
status = "married"
sex = "Male"
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}
Я использую схему кодирования base64 и используемый синтаксис как <field-name>.encode('base64','strict')
здесь field-name
состоит из вышеперечисленных полей - имя, статус и так далее.
все, кроме словаря "цвет", кодируется.
Я получаю ошибку в color.encode('base64','strict')
ошибка как показано ниже:
Traceback (most recent call last):
color.encode('base64','strict')
AttributeError: 'CaseInsensitiveDict' object has no attribute 'encode'
Я думаю, что метод кодирования не применим в словаре.
Как закодировать полный словарь на один раз?
Есть ли альтернатива encode
метод, который применим к словарям?
3 ответов
encode
- это метод, который имеет строковые экземпляры, а не словари. Вы не можете просто использовать его с каждым экземпляром каждого объекта.
Поэтому самым простым решением было бы вызвать str
в словаре сначала:
str(color).encode('base64','strict')
однако это менее прямолинейно, когда вы хотите декодировать свою строку и вернуть этот словарь. У Python есть модуль для этого, он называется огурец. Рассол может помочь вам получить строковое представление любого объекта, которое вы можете кодировать в base64. После того, как вы декодируете его обратно, вы также можете распаковать его, чтобы вернуть исходный экземпляр.
b64_color = pickle.dumps(color).encode('base64', 'strict')
color = pickle.loads(b64_color.decode('base64', 'strict'))
другие альтернативы pickle + base64 могут быть в JSON.
это еще один способ кодирования словаря python в Python.
Я тестировал в Python 36
import base64
my_dict = {'name': 'Rajiv Sharma', 'designation': "Technology Supervisor"}
encoded_dict = str(my_dict).encode('utf-8')
base64_dict = base64.b64encode(encoded_dict)
print(base64_dict)
my_dict_again = eval(base64.b64decode(base64_dict))
print(my_dict_again)
выход:
b'eyduYW1lJzogJ1Jhaml2IFNoYXJtYScsICdkZXNpZ25hdGlvbic6ICdUZWNobm9sb2d5IFN1cGVydmlzb3InfQ=='
{'name': 'Rajiv Sharma', 'designation': 'Technology Supervisor'}
# Something like this works on Python 2.7.12
from base64 import b64decode
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}
encoded_color = str(color).encode('base64','strict')
print(encoded_color)
decoded_color = b64decode(encoded_color)
print(decoded_color)