У меня есть 2 весьма вложенных Python словаря, и я хотел бы их сравнить (мои настоящие файлы Json содержат сотни тысяч строк). Эти словари содержат списки, а эти списки содержат словари. Порядок элементов не фиксирован, и это не проблема в случае словаря, но в случае списка. Поэтому мне нужно отсортировать элементы в моей структуре.
Я написал алгоритм сортировки, который рекурсивно сортирует элементы в моей структуре данных.
Мой код работает должным образом с Python2 .7 исполняемый файл, но он не работает с исполняемым файлом Python3 .6.6.
Я уже читал официальную документацию Python и знаю, что list.sort()
был изменен между Python2 и Python3 , но я считаю, что это довольно большое ограничение в Python3.
Я знаком с параметром key
, но он не решает мою проблему. Кроме того, ключи в dicts не совпадают.
Итак, мой вопрос: можно ли отсортировать список, содержащий больше элементов типа, как в моем случае?
Код :
test_1 = {"aaa": 111, "bbb": 222, "ccc": [{"o": [1, "t"]}, "a", "b", 1, [1, 2, [4, 3, [6, 5]]]]}
test_2 = {"bbb": 222, "aaa": 111, "ccc": [[2, 1, [3, 4, [5, 6]]], 1, "a", "b", {"o": ["t", 1]}]}
def list_sort(l):
if isinstance(l, list):
l.sort()
for x in l:
list_sort(x)
def dict_sorter(d):
for k, v in d.items():
if isinstance(v, dict):
dict_sorter(v)
elif isinstance(v, list):
v.sort()
for x in v:
if isinstance(x, dict):
dict_sorter(x)
elif isinstance(x, list):
list_sort(x)
print("\n\nBEFORE:")
print(test_1)
print(test_2)
print("EQ: {}".format(test_1 == test_2))
dict_sorter(test_1)
dict_sorter(test_2)
print("\n\nAFTER:")
print(test_1)
print(test_2)
print("EQ: {}".format(test_1 == test_2))
Вывод с Python2:
>>> python2 test.py
BEFORE:
{'aaa': 111, 'bbb': 222, 'ccc': [{'o': [1, 't']}, 'a', 'b', 1, [1, 2, [4, 3, [6, 5]]]]}
{'aaa': 111, 'bbb': 222, 'ccc': [[2, 1, [3, 4, [5, 6]]], 1, 'a', 'b', {'o': ['t', 1]}]}
EQ: False
AFTER:
{'aaa': 111, 'bbb': 222, 'ccc': [1, {'o': [1, 't']}, [1, 2, [3, 4, [5, 6]]], 'a', 'b']}
{'aaa': 111, 'bbb': 222, 'ccc': [1, {'o': [1, 't']}, [1, 2, [3, 4, [5, 6]]], 'a', 'b']}
EQ: True
Вывод с Python3:
>>> python3 test.py
BEFORE:
{'aaa': 111, 'bbb': 222, 'ccc': [{'o': [1, 't']}, 'a', 'b', 1, [1, 2, [4, 3, [6, 5]]]]}
{'bbb': 222, 'aaa': 111, 'ccc': [[2, 1, [3, 4, [5, 6]]], 1, 'a', 'b', {'o': ['t', 1]}]}
EQ: False
Traceback (most recent call last):
File "test.py", line 30, in <module>
dict_sorter(test_1)
File "test.py", line 17, in dict_sorter
v.sort()
TypeError: '<' not supported between instances of 'str' and 'dict'