【发布时间】:2014-11-03 12:32:24
【问题描述】:
我有一个名为“static_mac_dict”的字典,其中包含如下键值项:
'2273': {'Type': 'Static', 'Port': 'Eth1/4', 'Mac Address': '80:9B:4B:D2:C8:E1'}
我会根据键对字典进行排序,然后只打印它的值。
但是,我不能这样做,因为无法对字典进行排序。
因此,我决定
- 将所有字典键复制到一个列表(命名为 keysList)。
- 使用 Python 内置的 sort() 函数对列表进行排序。
- 迭代排序的键列表,然后打印字典值。
keysList 看起来像这样:
['1294', '1518', '2230', '2273', '2844', '3642', '3971', '816']
现在是代码:
keysList = []
keysList = static_mac_dict.keys()
keysList.sort()
print (keysList)
for key in keysList:
if key != None:
print dictionary values...
但是,我注意到在上面的代码中,使用 sort() 函数后键列表没有排序。
排序功能确实可以正常工作,只有当我将键从 STR 转换为 INT 时,您可以在下面的代码中看到:
keysList = []
keysList = static_mac_dict.keys()
for i in range(len(keysList)):
keysList[i] = int(keysList[i])
#sorting the list
keysList.sort()
print (keysList)
# converting the list items back to str
for i in range(len(keysList)):
keysList[i] = str(keysList[i])
for key in keysList:
if key != None:
print dictionary values...
我的问题是:为什么我需要将列表项转换为 INT 才能使排序功能正常工作?
提前致谢。
【问题讨论】:
-
字符串按字典顺序排序,例如
"21" < "3"。参见例如stackoverflow.com/q/5967500/3001761 -
你也可以通过
for key in sorted(static_mac_dict.keys(), key=int): print static_mac_dict[key]来完全避免复制
标签: python list sorting python-2.7 dictionary