我有一个列表字典,例如:
test_dict = { 'a' : [[1, 6, 8], [2, 5, 9], [54, 1, 34]],
'b' : [[1, 3, 8], [2, 1, 9], [54, 2, 34]],
'c' : [[1, 1, 8], [2, 9, 9], [54, 7, 34]]
}
我想按每个子列表中的第二个元素对每个值列表进行排序(升序)。所需的输出字典为:
output_dict = { 'a' : [[54, 1, 34], [2, 5, 9], [1, 6, 8]],
'b' : [[2, 1, 9], [54, 2, 34], [1, 3, 8]],
'c' : [[1, 1, 8], [54, 7, 34], [2, 9, 9]]
}
我在尝试:
sorted_dict = dict(sorted(test_dict.items(), key=lambda e: e[1][1]))
sorted_dict.items()
一点,这似乎无能为力。
最佳答案
您正在寻找按字典值而不是字典键顺序对列表进行排序的方法。为此,您可以使用字典理解:
res = {k: sorted(v, key=lambda x: x[1]) for k, v in test_dict.items()}
{'a': [[54, 1, 34], [2, 5, 9], [1, 6, 8]],
'b': [[2, 1, 9], [54, 2, 34], [1, 3, 8]],
'c': [[1, 1, 8], [54, 7, 34], [2, 9, 9]]}
对于等效功能,可以使用
key=operator.itemgetter(1)
。在Python 3.6+中,应保持字典顺序。 3.6版之前的字典是无序的,您不应该期望键的任何特定顺序。要按键订购,可以使用
collections.OrderedDict
:from collections import OrderedDict
res_ordered = OrderedDict(sorted(res.items(), key=lambda x: x[0]))
OrderedDict([('a', [[54, 1, 34], [2, 5, 9], [1, 6, 8]]),
('b', [[2, 1, 9], [54, 2, 34], [1, 3, 8]]),
('c', [[1, 1, 8], [54, 7, 34], [2, 9, 9]])])
关于python - 按每个列表中的第二个元素对列表字典进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52946216/