我有以下格式的列表字典。
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])
此处,它仅对值的第一列进行排序,而其余两列未排序。
我有我的答案,但我正在寻找解释,这对某些情况有效,对其他情况不起作用。
提前致谢。
答案 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的排序列表默认规则正是您所需要的,它将按照第一列排序列表。或者在列表中输入,如果两个列表具有相同的第一个项目,则它们将按第二个项目排序,依此类推。