Это следующая проблема:
main_module.py
from collections import OrderedDict
from my_other_module import foo
a = OrderedDict([
('a', 1),
('b', 2),
('c', 3),
('d', 4),
])
foo(**a)
my_other_module.py
def foo(**kwargs):
for k, v in kwargs.items():
print k, v
Когда я запускаю main_module.py
Я ожидаю получить распечатку в указанном порядке:
a 1
b 2
c 3
d 4
Но вместо этого я получаю:
a 1
c 3
b 2
d 4
Я понимаю, что этоимеет какое-то отношение к тому, как реализован оператор **
и каким-то образом он теряет порядок передачи словарных пар. Также я понимаю, что словари в python не упорядочены как списки, потому что они реализованы в виде хеш-таблиц.Могу ли я применить какой-нибудь «хак», чтобы получить поведение, необходимое в этом контексте?
PS - В моей ситуации я не могу отсортировать словарь внутри функции foo, так как нет правилза которым можно следовать, кроме строгого порядка, в котором передаются значения.