【发布时间】:2018-11-11 08:43:52
【问题描述】:
这是以下问题:
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中的字典不是按列表排序的,因为它们'被实现为哈希表。是否有任何我可以应用的“hack”,以便获得在这种情况下所需的行为?
附: - 在我的情况下,我无法在 foo 函数中对字典进行排序,因为除了传入值的严格顺序之外,没有可以遵循的规则。
【问题讨论】:
-
为什么不直接将
OrderedDict作为普通参数而不是**kwarg传递?
标签: python python-2.7 dictionary ordereddictionary