如何对python字典进行编码?

2024-09-29 05:15:08 发布

您现在位置: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方法之外,还有其他适用于词典的方法吗?


Tags: 方法name示例field编码statusmale词典
3条回答
# 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)

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

这是用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'}

相关问题 更多 >