Как закодировать словарь 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, который применим к словарям?

Ответ 1

encode - это метод, который содержит экземпляры строк, а не словари. Вы не можете просто использовать его с каждым экземпляром каждого объекта. Поэтому самым простым решением было бы сначала вызвать str в словаре:

str(color).encode('base64','strict')

Однако, это менее прямолинейно, если вы хотите декодировать свою строку и вернуть этот словарь. У Python есть модуль для этого, он называется pickle. Pickle может помочь вам получить строковое представление любого объекта, который затем можно закодировать до base64. После его декодирования вы также можете распечатать его, чтобы вернуть исходный экземпляр.

b64_color = pickle.dumps(color).encode('base64', 'strict')
color = pickle.loads(b64_color.decode('base64', 'strict'))

Другие альтернативы pickle + base64 могут быть json.

Ответ 2

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

Ответ 3

простой и легкий способ:

import json
converted_color = json.dumps(color)
encoded_color = converted_tuple.encode()
print(encoded_tuple)
decoded_color = encoded_color.decode()
orginal_form = json.load(decoded_color)

Ответ 4

Это еще один способ кодирования словаря 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'}