将字典转换为字节并再次转换回来,使用Python?

56

我需要通过套接字在两台计算机之间发送一些变量的值,并打算使用md5哈希算法作为数据校验和,以确保数据传输正确。为执行md5哈希算法,我必须将数据转换为字节。我想要传输变量的名称和值。由于我有很多变量,我使用了一个字典。

那么我想将像这样的内容转换为字节?

variables = {'var1' : 0, 'var2' : 'some string', 'var1' : ['listitem1','listitem2',5]}

换句话说,我有一个字典,里面包含许多不同的数据类型,其中包括列表,这些列表又包含多种不同的数据类型,并且我想将其转换为字节。然后在接收机上将这些字节转换回字典。

我尝试了一些不同的方法,建议使用json(Convert a python dict to a string and back),但我似乎无法生成字符串,更别说字节了。


4
你的问题和你链接的那个问题有何不同?你说尝试了“几种不同的方法”。将注意力集中在一个方法上,告诉我们你尝试了什么,展示你的代码,并告诉我们什么没有起作用。 - Robᵩ
一个字节串就是一组字节。 - Marcin
3
如果你不知道如何阅读某个人已经为你提供链接的文档(http://docs.python.org/2/library/json.html),那么我认为你也不会知道如何阅读那些从同样的文档中复制的示例,或者是别人独立编写的等效示例。 - abarnert
我知道如何阅读文档,但我的问题实际上是是否有一种方法可以将字典直接转换为字节串,而无需先将其转换为字符串。 - user1205406
如果这是真的,那么你的问题为什么说“我无法生成一个字符串,更不用说字节了”?此外,链接的问题中显示的每个方法都会在Python 2.x中生成字节(str或二进制文件/StringIO),而除JSON之外的所有方法在3.x中也会生成字节(bytes或二进制文件/BytesIO)。如果你真的读过文档并尝试过一些东西,但卡住了,那就向我们展示你尝试过的内容。 - abarnert
显示剩余3条评论
2个回答

59

这应该可以工作:

import json

s = json.dumps(variables)
variables2 = json.loads(s)
assert variables == variables2

97
转储对象到str而不是字节。 - VicX
61
@VicX,要将变量转换为字节,您可以使用json.dumps(variables).encode('utf-8'),然后要从字节转换回来,您可以使用json.loads(s.decode('utf-8')) - Jed
7
@Jed,但问题是关于字节的。 - techkuz

26
如果您需要将字典转换为二进制,您需要将其转换为字符串(JSON),如前面的答案所述,然后您可以将其转换为二进制。
例如:
my_dict = {'key' : [1,2,3]}

import json
def dict_to_binary(the_dict):
    str = json.dumps(the_dict)
    binary = ' '.join(format(ord(letter), 'b') for letter in str)
    return binary


def binary_to_dict(the_binary):
    jsn = ''.join(chr(int(x, 2)) for x in the_binary.split())
    d = json.loads(jsn)  
    return d

bin = dict_to_binary(my_dict)
print bin

dct = binary_to_dict(bin)
print dct

将会给出输出结果

1111011 100010 1101011 100010 111010 100000 1011011 110001 101100 100000 110010 101100 100000 110011 1011101 1111101

{u'key': [1, 2, 3]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接