Как я могу сделать, чтобы преобразовать OrderedDict в Dict - PullRequest
0 голосов
/ 07 июня 2019

У меня есть этот список

a = [OrderedDict([('a','b'), ('c','d'), ('e', OrderedDict([('a','b'), ('c','d') ]))])]

и я хочу преобразовать OrderedDict в словарь.

Ты знаешь, как я мог это сделать?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Для преобразования вложенного OrderedDict вы можете использовать пакет json

>>> import json
>>> json.loads(json.dumps(a))

[{'a': 'b', 'c': 'd', 'e': {'a': 'b', 'c': 'd'}}]
0 голосов
/ 07 июня 2019

Вы можете создать рекурсивную функцию, чтобы выполнить преобразование из OrderedDict в dict, проверяя типы данных с помощью вызовов isinstance.

from collections import OrderedDict

def OrderedDict_to_dict(arg):
    if isinstance(arg, (tuple, list)): #for some iterables. might need modifications/additions?
        return [OrderedDict_to_dict(item) for item in arg]

    if isinstance(arg, OrderedDict): #what we are interested in
        arg = dict(arg)

    if isinstance(arg, dict): #next up, iterate through the dictionary for nested conversion
        for key, value in arg.items():
            arg[key] = OrderedDict_to_dict(value)

    return arg

a = [OrderedDict([('a','b'), ('c','d'), ('e', OrderedDict([('a','b'), ('c','d') ]))])]


result = OrderedDict_to_dict(a)
print(result)
#Output:
[{'a': 'b', 'c': 'd', 'e': {'a': 'b', 'c': 'd'}}]

Однако обратите внимание, что OrderedDicts также являются словарями и поддерживают поиск по ключевым словам.

print(a[0]['e'])
#Output:
OrderedDict([('a', 'b'), ('c', 'd')])

a[0]['e']['c']
#Output:
'd'

Таким образом, вам не нужно преобразовывать OrderedDicts в dicts, если вам просто необходим доступ к значениям, как это позволяет словарь, поскольку OrderedDict поддерживает те же операции.

...