基于字典中列表的各列进行排序

时间:2016-09-03 09:27:23

标签: python sorting dictionary

我有以下格式的列表字典。

b =  
   {'a': [1, 1, 1], 
    'c': [1, 0, 0], 
    'b': [1, 0, 1], 
    'e': [0, 0, 1], 
    'd': [0, 0, 0], 
    'g': [0, 1, 1], 
    'f': [0, 1, 0], 
    'h': [1, 1, 0]
   }

我要做的是对列表进行排序并根据列表的列显示字典。应该对第一列进行排序,然后第二列应该按照最后一列的第三列进行排序。

我想要这样的清单。

b =  
   {'d': [0, 0, 0], 
    'e': [0, 0, 1], 
    'f': [0, 1, 0], 
    'g': [0, 1, 1], 
    'c': [1, 0, 0], 
    'b': [1, 0, 1], 
    'h': [1, 1, 0], 
    'a': [1, 1, 1]
   }

我可以像这样对列表的第一个值进行排序。

sorted(b.items(), key=lambda e:e[1][0])

并且类似地做第二和第三。但是,如果我对第一列进行排序,则不会对第二列和第三列进行排序。

所以,我这样做了。

sorted(b.items(), key=lambda e:e[1])

这给了我正确的答案。但我不确定这是如何工作的。

其次,如果我这样做,

sorted(b.values(), reverse=True, key=lambda e:e[0])

此处,它仅对值的第一列进行排序,而其余两列未排序。

我有我的答案,但我正在寻找解释,这对某些情况有效,对其他情况不起作用。

提前致谢。

2 个答案:

答案 0 :(得分:1)

此:

sorted(b.items(), key=lambda e:e[1])

有效,因为它使用每个列表的全部作为比较的关键字。 Python知道如何按字典顺序排列"默认情况下比较列表,这意味着它比较第一个元素,然后如果它们相等则进入下一个元素。就像按字母顺序排序单词一样。

答案 1 :(得分:1)

sorted(b.items(), key=lambda e:e[1])

有效,因为lambda返回整个列表,例如[1, 1, 1][1, 0, 0]。 Python的排序列表默认规则正是您所需要的,它将按照第一列排序列表。或者在列表中输入,如果两个列表具有相同的第一个项目,则它们将按第二个项目排序,依此类推。