def createNode(doc_, **param_):
cache = {'p':'property','l':'label','td':'totalDelay','rd':'routeDelay','ld':'logicDelay'}
for index in param_:
newIndex = cache[index]
value = param_[index]
print newIndex, '=', value
doc = 10
createNode(doc, p='path', l='ifft4k_radix4_noUnolling_core.vi', td='3.0', ld='1.0', rd='2.0')
在Python 2.6上运行此代码给我以下结果 .
routeDelay = 2.0
property = path
totalDelay = 3.0
logicDelay = 1.0
label = ifft4k_radix4_noUnolling_core.vi
我需要保持参数的顺序,我的意思是, property
首先出现,然后是 label
,直到最后得到 routeDelay
.
问:在Python中保持字典参数顺序的方法是什么?
3 回答
然后你只是按错误的顺序做事 - 不需要有序的词典!相反,请尝试使用缓存对的元组,如下所示:
这与您的
createNode
版本具有完全相同的语义,加上维护所需顺序的所需属性,性能至少同样出色 . 通过专注于"keeping the dictionary ordered",你专注于错误的问题(就像在大多数情况下人们伸手去拿_1732692一样的情况一样!) .常规字典不会,您将不得不使用有序字典 . 看看这些链接:
PEP 372: Adding an ordered dictionary to collections
Using an ordered dict as object dictionary in python - 一个证明人们正在使用PEP 372的冒犯的SO问题:-)
Nicola Larosa & Michael Foord's odict module
如果你想谷歌更多,请尝试使用搜索词“python ordered dictionary” . 我记得在这里看过一些有序的字典相关问题,所以如果由于某些原因上述链接不合适,也许你可以在其他问题上找到更好的东西 .
更新:马克建议使用元组列表可能非常好,实际上,但命名元组可能更方便:a relevant fragment in the docs . 此外,如果您计划对数据进行一些序列化/反序列化并希望快速完成,请查看Google的protocol buffers(Python工具可用) .
字典不保留键的顺序 . 您可以使用元组列表而不是字典 .