Il modo più semplice sarebbe quella di utilizzare comprensione dizionario come segue:
new_data = { key.decode(): val.decode() for key, val in data.items() }
Esempio:
>>> data = {
... b'cart1': b'apples',
... b'cart2': b'oranges',
... b'cart3': b'grapes'
... }
>>>
>>> new_data = { key.decode(): val.decode() for key, val in data.items() }
>>>
>>> new_data
{'cart1': 'apples', 'cart2': 'oranges', 'cart3': 'grapes'}
>>>
Per convertire coppie chiavi valore di tipo byte in ordine casuale, uso :
new_data = {
key.decode() if isinstance(key, bytes) else key:
val.decode() if isinstance(val, bytes) else val
for key, val in data.items()
}
Esempio:
>>> data = {
... b'cart1': 'apples',
... 'cart2': b'oranges',
... b'cart3': b'grapes'
... }
>>>
>>> new_data = {
... key.decode() if isinstance(key, bytes) else key:
... val.decode() if isinstance(val, bytes) else val
... for key, val in data.items()
... }
>>> new_data
{'cart1': 'apples', 'cart2': 'oranges', 'cart3': 'grapes'}
>>>
Nota: Il codice di cui sopra sarà meglio per dizionario dei dati semplice. Ma per i dizionari complessi, io preferirei usare il codice Guy Gangemi s', che è una modifica del paxdiablo's risposta:
def convert(data):
if isinstance(data, bytes): return data.decode()
if isinstance(data, dict): return dict(map(convert, data.items()))
if isinstance(data, tuple): return tuple(map(convert, data))
if isinstance(data, list): return list(map(convert, data))
return data
Esempio:
>>>
>>> def convert(data):
... if isinstance(data, bytes): return data.decode()
... if isinstance(data, dict): return dict(map(convert, data.items()))
... if isinstance(data, tuple): return tuple(map(convert, data))
... if isinstance(data, list): return list(map(convert, data))
... return data
...
>>>
>>> data = {
... b'fruits': {
... b'cart1': b'apples',
... b'cart2': 'oranges',
... b'cart3': b'grapes',
... b'cart4': (b'banana', 'pear'),
... b'cart5': [b'kiwi', b'papaya']
... },
... 'vegetables': {
... 'cart1': b'carrots',
... b'cart2': None,
... b'cart3': {},
... b'cart4': False
... }
... }
>>>
>>> convert(data)
{'fruits': {'cart1': 'apples', 'cart2': 'oranges', 'cart3': 'grapes', 'cart4': ('banana', 'pear'), 'cart5': ['kiwi', 'papaya']}, 'vegetables': {'cart1': 'carrots', 'cart2': None, 'cart3': {}, 'cart4': False}}
>>>
Cosa c'è di sbagliato con questo? – salparadise
"modello di progettazione migliore" - oh .. che tipo di motivo di progettazione è questo? :/ –