问题:为什么退出会显示为我输出的第一行?
让我先说一下,我在尝试解决我正在编写的python脚本中的特定问题时编写了这段代码。所以,是的,我知道这段代码可能看起来很难看。
我无法弄清楚为什么首先显示 EXIT 。我甚至尝试过' Quit' :'退出' 到字典的开头(在'设置'之前,但它仍然显示相同。我无法判断是否与某事有关一般的iterkeys或词典的性质。
起初,我的猜测是,这可能与 mmenu [' Quit'] 是一个字符串和 mmenu [&#39]有关。 ;设置'] 是一个字典,但后来我注意到以下顺序输出如下:
重命名:输入新名称
在哪里?
删除:选择要删除的菜单项
当他们被编码为:
'Rename': 'Rename: Enter a new name',
'Delete': 'Delete: Select Menu Item to Delete',
'Move_Item': 'Where?'
但我能弄清楚的是重要的原因。
任何见解都表示赞赏:)
#!/usr/bin/python
from inspect import isfunction
def create():
print "create function: you've just created a menu"
pass
mmenu = {
'Settings':
{
'Edit':
{
'Create': create,
'Modify':
{
'Rename': 'Rename: Enter a new name',
'Delete': 'Delete: Select Menu Item to Delete',
'Move_Item': 'Where?'
}
},
'Default_Settings': 'Default Settings'},
'Quit' : 'EXIT'
}
nmenu = mmenu
omenu = {}
def dictloop(dmenu):
global omenu
nmenu = dmenu
for key in nmenu.iterkeys():
if isfunction(nmenu[key]):
nmenu[key]()
if type(nmenu[key]) is str:
print nmenu[key]
if type(nmenu[key]) is dict:
omenu = nmenu[key]
dictloop(omenu)
dictloop(nmenu)
输出:
EXIT
create function: you've just created a menu
Rename: Enter a new name
Where?
Delete: Select Menu Item to Delete
Default Settings
答案 0 :(得分:0)
这是Python用于为其dict创建订单的方法:
列表中的几个位置将为空,因此此方法不会有效地使用内存,但这意味着可以使用二进制搜索在一个计算中检索字典中任何项目的位置。 (例如hash('x')& 31 == key ['x']的索引)
这里有一个很好的描述: http://www.laurentluce.com/posts/python-dictionary-implementation/