我有一个名为" static_mac_dict"它有一个键值项目如下:
'2273': {'Type': 'Static', 'Port': 'Eth1/4', 'Mac Address': '80:9B:4B:D2:C8:E1'}
我会根据键对字典进行排序,然后仅打印其值。
但是,我不能这样做,因为字典无法排序。
因此,我决定
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()函数之后,键列表没有被排序。
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以使sort函数正常工作?
提前致谢。
答案 0 :(得分:3)
sort
函数 正常工作 - 只是不符合您的预期。它正在对字符的lexicographic order中的字符串进行排序。
Python(或任何其他语言)不可能知道你真的想要将字符串解释为数字 - 除非你告诉它(参见gnibbler
的回答)。
请注意,与大多数语言一样,python中的排序完全取决于对象的type
。大多数内置类型(例如int
,float
,str
,甚至tuple
和list
)都有明确定义的排序。自定义类的实例没有(有意义的)订单,但是you can define it if you want。
答案 1 :(得分:1)
由于键是字符串,因此它们将按字典顺序进行比较,而不是根据需要进行数字比较。
您可以使用int
作为key
函数
keysList.sort(key=int)
这将为您节省转换为int和返回str
的显式步骤答案 2 :(得分:1)
如评论中所述:
字符串按字典顺序排序,例如" 21" < " 3"。
希望能回答你的问题。
现在,如果您想将字符串列表转换为整数列表,请查看以下问题:Convert all strings in a list to int。
results = ['1294', '1518', '2230', '2273', '2844', '3642', '3971', '816']
results = map(int, results)