如何通过值对Python字典进行排序?

37

@Tichodroma:那是一个字典列表,而这只是一个字典,不在列表中。 - Martijn Pieters
2个回答

29

字典本身无法排序,但您可以对其内容进行排序:

sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2)
sorted(a_dict.items(), key=lambda item: item[1][1])    # Python 3

你可以把结果存储到一个collections.OrderedDict中 (自从2.7版本):

OrderedDict(sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2))
OrderedDict(sorted(a_dict.items(), key=lambda item: item[1][1])    # Python 3

6
你的lambda函数中所进行的参数解包只能在Python 2.x中使用。在Python 3中,你需要使用key=lambda k, v : v[1]来完成相同的操作。 - Blckknght

1
在你的例子中,你使用了字典列表。按键排序字典:
mydict = {'carl':40,
          'alan':2,
          'bob':1,
          'danny':3}

for key in sorted(mydict.iterkeys()):
    print "%s: %s" % (key, mydict[key])

alan: 2
bob: 1
carl: 40
danny: 3

如果您想按值对字典进行排序,请参阅如何按值对字典进行排序?


1
你指的是哪个字典列表?问题中的代码具有元组作为值的字典,根本没有列表。 - Blckknght
当然,你是对的。我犯了一个愚蠢的错误。 - ymn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接