打印按值排序的字典

Xtr*_*ato 21 python sorting dictionary loops

我基本上试图遍历一个字典并打印出从最大值到最低值的键/值.我一直在搜索这个网站,很多人都在使用lambda,但我不确定它是如何工作的所以我现在正试图避免它.

dictIterator = iter(sorted(bigramDict.iteritems()))
for ngram, value in dictIterator:
    print("There are " + str(value) + " " + ngram)
Run Code Online (Sandbox Code Playgroud)

查看上面的代码,我假设它会生成一个迭代器,它按从大到小的顺序返回键/值对,但事实并非如此.

任何人都可以看到问题是什么?或另一种方法吗?

oDD*_*ooL 21

通过将第一个元素视为比第二个元素更重要,可以利用sort对元组进行处理的事实:

d = { "a":4, "c":3, "b":12 }
d_view = [ (v,k) for k,v in d.iteritems() ]
d_view.sort(reverse=True) # natively sort tuples by first element
for v,k in d_view:
    print "%s: %d" % (k,v)
Run Code Online (Sandbox Code Playgroud)

输出:

b: 12
a: 4
c: 3
Run Code Online (Sandbox Code Playgroud)

编辑:单行,生成器表达式:

sorted( ((v,k) for k,v in d.iteritems()), reverse=True)
Run Code Online (Sandbox Code Playgroud)

输出:

[(12, 'b'), (4, 'a'), (3, 'c')]
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!Python 3单行代码:`sorted((((v,k)for d.items()中的k,v,reverse = True)` (3认同)

Emm*_*uel 20

您可以使用key参数sorted来排序第2项:

>>> d = { "a":4, "c":3, "b":12 }
>>> from operator import itemgetter
>>> for k, v in sorted(d.items(), key=itemgetter(1)):
    print k, v


c 3
a 4
b 12
>>> 
Run Code Online (Sandbox Code Playgroud)


jss*_*367 5

这是 Python 3 的解决方案:

d = { "a":4, "c":3, "b":12 }
sorted(((v, k) for k, v in d.items()), reverse=True)
Run Code Online (Sandbox Code Playgroud)