对列表中的Python字典对象进行排序

对列表中的Python字典对象进行排序,python,python-3.x,sorting,dictionary,Python,Python 3.x,Sorting,Dictionary,我正在尝试使用字典键按升序对列表进行排序 您可以假定每个字典级别只有一个键 输入: res = [{'hi': {'abc': 5}}, {'bye': {'def': 5}}, {'hi': {'cba': 5}}] 我的代码: def getitem (item): return (item.keys()) print (sorted(res, key = getitem)) 所需输出: [{'bye': {'def': 5}}, {'hi': {'abc': 5}}, {'h

我正在尝试使用字典键按升序对列表进行排序

您可以假定每个字典级别只有一个键

输入:

res = [{'hi': {'abc': 5}}, {'bye': {'def': 5}}, {'hi': {'cba': 5}}]
我的代码:

def getitem (item):
    return (item.keys())

print (sorted(res, key = getitem))
所需输出:

[{'bye': {'def': 5}}, {'hi': {'abc': 5}}, {'hi': {'cba': 5}}]
很接近了--只需将dict传递到
iter()
以创建迭代器,然后在迭代器中请求
next()
项。如果存在多个dict,则会对dict中的第一个键进行排序(Python3.6+dict按插入时间排序)。比较器可以返回一个相对优先级的元组,如果外键相等,就可以对内键进行排序

res = [{'hi': {'abc': 5}}, {'bye': {'def': 5}}, {'hi': {'cba': 5}}]

def compare(d):
    outer = next(iter(d))
    return outer, next(iter(d[outer]))

print(sorted(res, key=compare))

你的字典总是有一个键吗?在这种情况下,为什么要用字典呢?
dict.keys
对象的比较运算符用于子集关系抱歉混淆,我已经更新了示例,dict中可能只有一个键,但可以有多个对象具有相同的键,如果对象键相同(“hi”,在上述情况下),那么我想按其嵌套键(“abc”)对其进行排序你应该只使用元组,为什么要使用嵌套字典?元组将按照您希望的方式自然排序,并且在从流数据源一个接一个地接收这些字典对象时,内存效率更高。。。。那么,是否有什么东西阻止您将它们转换为更合理/有用的数据结构?
next(iter(x))
就足够了;无需调用
方法。很好的调用--谢谢。我猜它会忽略嵌套的dict?它会;Python的排序方法是稳定的,因此如果两个顶级键相等,则保留输入列表中dict的相对顺序。