对一个值字典的列表进行排序

时间:2018-03-11 13:20:04

标签: python list dictionary

我有数据:

{'foo': [{1: 55}, {'c': 43}], 'bar': [{1: 43}, {'c': 40}]}

我想根据它的值对foo和bar中的词典进行排序:

{'foo': [{'c': 43}, {1: 55}], ...}

我不想排序' foo'和' bar'。

你有一个简单的方法吗?对不起,如果我在编写dicts / lists时出错了。感谢

4 个答案:

答案 0 :(得分:6)

这是一种方法。 sorted接受key参数,该参数接受匿名lambda函数。由于每个字典只有一个键/值,您可以列出您的值并选择第一个。

d = {'foo': [{1: 55}, {'c': 43}], 'bar': [{1: 43}, {'c': 40}]}

res = {k: sorted(v, key=lambda x: list(x.values())[0]) for k, v in d.items()}

# {'bar': [{'c': 40}, {1: 43}], 'foo': [{'c': 43}, {1: 55}]}

答案 1 :(得分:2)

然后告诉它按值排序:

>>> x={'foo': [{1: 55}, {'c': 43}], 'bar': [{1: 43}, {'c': 40}]}
>>> for a in x: x[a].sort(key=lambda i: list(i.values())[0])
>>> x
{'bar': [{'c': 40}, {1: 43}], 'foo': [{'c': 43}, {1: 55}]}

注意,因为它是一个字典,你必须检索所有值,转换为列表,并获取第一个索引。可能不是排序的最佳结构。

答案 2 :(得分:1)

作为kabanus'的替代品。 answer(使用O(len(x)) dict查询),这是一种使用dict values view的方法:

x={'a': [{1: 55}, {'c': 43}], 'b': [{1: 43}, {'c': 40}]}
for a in x.values(): a.sort(key=lambda i: list(i.values())[0])
print(x)

打印

{'a': [{'c': 43}, {1: 55}], 'b': [{'c': 40}, {1: 43}]}

Try it online!

我没有测量过这种方法的性能,但我希望它会更快。

答案 3 :(得分:0)

您可以这样做:

data={'foo': [{1: 55}, {'c': 43}], 'bar': [{1: 43}, {'c': 40}]}

print({i:sorted(j,key=lambda x:list(x.values())) for i,j in data.items()})

输出:

{'foo': [{'c': 43}, {1: 55}], 'bar': [{'c': 40}, {1: 43}]}