如何编码Python字典?

25 投票
6 回答
76314 浏览
提问于 2025-04-18 11:43

我想对下面的示例内容进行编码:

name = "Myname"
status = "married"
sex = "Male"
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}

我使用的是 base64 编码方式,语法是 <field-name>.encode('base64','strict'),其中 field-name 是上面提到的字段,比如名字、状态等等。

除了字典 "color" 之外,其他的都能成功编码。 在 color.encode('base64','strict') 这行代码上我遇到了错误。

错误信息如下:

Traceback (most recent call last):
    color.encode('base64','strict') 
AttributeError: 'CaseInsensitiveDict' object has no attribute 'encode'

我觉得 encode 方法不适用于字典。 我该如何一次性编码整个字典呢? 有没有适合字典的替代方法来进行编码?

6 个回答

1

之前的回答提到使用pickle的方法在Python 3.10中不管用,会出现错误:AttributeError: 'bytes' object has no attribute 'encode'

这里是如何对一个Python字典进行编码和解码的方法

import pickle
import base64

color = {'eyeColor': 'brown', 'hairColor': 'golden', 'skinColor': 'white'}

encoded_string = base64.b64encode(pickle.dumps(color)).decode() # Base64 encoded string

dict_decoded = pickle.loads(base64.b64decode(encoded_string)) # Decoded back to dictionary
1

简单易懂的方法:

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

这是另一种在Python中编码字典的方法。

我在Python 3.6中进行了测试。

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'}
5

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,程序就要做出反应。这种情况我们可以用“事件”来处理。

事件就像是程序中的一个信号,告诉我们某件事情发生了。比如,用户点击了鼠标、按下了键盘,或者页面加载完成等。这些都是事件。

当事件发生时,我们可以设置一些“监听器”,也就是程序中的小助手,专门负责等待这些事件的发生。一旦事件发生,监听器就会触发相应的代码,让程序执行特定的操作。

简单来说,事件和监听器就像是一个人和他的助手。这个人会做很多事情,而助手则在一旁等待,随时准备帮助他完成任务。

通过使用事件和监听器,我们可以让程序变得更加互动和智能,提升用户体验。

color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}
base64.urlsafe_b64encode(json.dumps(color).encode()).decode()
24

encode 是一个字符串的方法,而不是字典的方法。你不能随便把它用在所有对象上。

所以最简单的解决办法是先对字典使用 str 方法:

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

不过,如果你想把字符串解码回字典,这就没那么简单了。Python 有一个模块可以做到这一点,叫做 pickle。Pickle 可以帮助你把任何对象转换成字符串形式,然后你可以把这个字符串编码成 base64。等你解码回来后,还可以用 unpickle 方法把它变回原来的对象。

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

除了 pickle + base64 之外,另一个选择是 json

撰写回答