Python列表未使用内置排序函数进行排序

时间:2014-11-03 12:32:24

标签: python list sorting python-2.7 dictionary

我有一个名为" static_mac_dict"它有一个键值项目如下:

'2273': {'Type': 'Static', 'Port': 'Eth1/4', 'Mac Address': '80:9B:4B:D2:C8:E1'}

我会根据键对字典进行排序,然后仅打印其值。

但是,我不能这样做,因为字典无法排序。

因此,我决定

  • 将所有字典键复制到列表(名为keysList)。
  • 使用在sort()函数中内置的Python列表对列表进行排序。
  • 迭代排序的键列表,然后打印字典值。

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函数正常工作?

提前致谢。

3 个答案:

答案 0 :(得分:3)

sort函数 正常工作 - 只是不符合您的预期。它正在对字符lexicographic order中的字符串进行排序。

Python(或任何其他语言)不可能知道你真的想要将字符串解释为数字 - 除非你告诉它(参见gnibbler的回答)。

请注意,与大多数语言一样,python中的排序完全取决于对象的type。大多数内置类型(例如intfloatstr,甚至tuplelist)都有明确定义的排序。自定义类的实例没有(有意义的)订单,但是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

Answer

results = ['1294', '1518', '2230', '2273', '2844', '3642', '3971', '816']
results = map(int, results)