2013-10-07 12 views
5

Należy wysłać wartość niektórych zmiennych między dwoma komputerami i zamierzam to zrobić za pomocą gniazd. Używam algorytmu mieszania md5 jako sumy kontrolnej dla wysyłanych danych, aby zapewnić prawidłowe przesyłanie danych. Aby wykonać algorytm mieszania md5, muszę przekonwertować dane na bajty. Chcę przesłać zarówno nazwę zmiennej, jak i jej wartość. Ponieważ mam wiele zmiennych, używam słownika.Konwertuj słownik na bajty i ponownie python?

Więc chcę przekonwertować coś takiego na bajty?

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

Innymi słowy mam słownik z wielu różnych typów danych wewnątrz niego, w tym listy, które z kolei mają wiele typów różne dane w nich i chcę przekonwertować do bajtów. Następnie na komputerze odbierającym konwertuj te bajty z powrotem do słownika.

Próbowałem już kilku różnych metod, polecanych tutaj json (Convert a python dict to a string and back), ale nie mogę utworzyć sznurka, żeby nie zwracać uwagi na bajty.

+4

Jak to pytanie różni się od tej, którą powiązany? Mówisz, że próbowałeś "kilku różnych metod". Skoncentruj się na jednym. Powiedz nam, co próbujesz, pokaż nam swój kod i powiedz nam, co Ci nie poszło. –

+0

Ten, który mi się nie podoba, nie podał przykładu. – user1205406

+0

A bytestring to bajty. – Marcin

Odpowiedz

12

To powinno działać:

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

'dumps' zrzuca obiekt do' str' nie bajtów – VicX

7

Jeśli trzeba konwertować słownika na binarny, trzeba przekonwertować go na sznurku (JSON), jak opisano w poprzedniej odpowiedzi, to można przekonwertować go na binarny .

Na przykład:

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 

da wyjście

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

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