web-dev-qa-db-ja.com

辞書をバイトに変換し、再びPythonに戻りますか?

2つのマシン間でいくつかの変数の値を送信し、ソケットを使用してそれを実行する必要があります。データが正しく送信されるように、送信するデータのチェックサムとしてmd5ハッシュアルゴリズムを使用します。 md5ハッシュアルゴリズムを実行するには、データをバイトに変換する必要があります。変数の名前とその値の両方を送信したい。変数がたくさんあるので、辞書を使います。

だから私はこのようなものをバイトに変換したいですか?

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

言い換えると、リストに複数の異なるデータ型が含まれるさまざまなデータ型を含む辞書があり、それをバイトに変換したいのです。次に、受信側のマシンでこれらのバイトを辞書に戻します。

私はjsonがここで推奨されているいくつかの異なる方法を試しました( Convert a python dict to a string and back )が、私はそれを使って文字列を生成することはできませんバイトを気にしません。

22
user1205406

これは動作するはずです:

s=json.dumps(variables)
variables2=json.loads(s)
assert(variables==variables2)
27
Robᵩ

辞書をバイナリに変換する必要がある場合は、前の回答で説明したように文字列(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]}
11
shshank