Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按每个列表中的第二个元素对列表进行排序_Python_Sorting_Dictionary - Fatal编程技术网

Python 按每个列表中的第二个元素对列表进行排序

Python 按每个列表中的第二个元素对列表进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,我有一本清单字典,例如: 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

我有一本清单字典,例如:

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)
。在Python3.6+中,应该保持字典顺序。在3.6之前,字典是无序的,您不应该期望任何特定的键顺序

要按键订购,您可以使用:


您可以像下面这样做,它将更新现有的字典

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]]
            }

for k, v in test_dict.items():
    test_dict[k] = sorted(v, key=lambda e: e[1])

print(test_dict)
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]]
            }

new_dict = {k:sorted(v, key=lambda e: e[1]) for k, v in test_dict.items()}

print(new_dict)
创建新词典的步骤

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]]
            }

for k, v in test_dict.items():
    test_dict[k] = sorted(v, key=lambda e: e[1])

print(test_dict)
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]]
            }

new_dict = {k:sorted(v, key=lambda e: e[1]) for k, v in test_dict.items()}

print(new_dict)

事实上+1虽然不清楚他们是否也想维持关键订单,但我建议使用
OrderedDict
too@Chris_Rands,是的,不清楚这是3.6+中的一个问题,我相信在3.6+中会保持顺序。@Chris_Rands你是对的,我也关心键的顺序。Jpp请您修改您的答案,使之成为一个有序的口述,然后我会接受它。Thanks@Qubix,当然,在test_dict.items()中为k,v添加了
test_dict={k:sorted(v,reverse=True)