我有数据:
{'foo': [{1: 55}, {'c': 43}], 'bar': [{1: 43}, {'c': 40}]}
我想根据它的值对foo和bar中的词典进行排序:
{'foo': [{'c': 43}, {1: 55}], ...}
我不想排序' foo'和' bar'。
你有一个简单的方法吗?对不起,如果我在编写dicts / lists时出错了。感谢
答案 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}]}
我没有测量过这种方法的性能,但我希望它会更快。
答案 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}]}