打印按值排序的dict

2024-05-18 23:39:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

有人知道问题出在哪里吗?或者另一种方法?


Tags: lambdainforvalue网站dicttheresorted
3条回答

可以利用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)

输出:

b: 12
a: 4
c: 3

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

sorted( ((v,k) for k,v in d.iteritems()), reverse=True)

输出:

[(12, 'b'), (4, 'a'), (3, 'c')]
>>> d = { "a":4, "c":3, "b":12 }
>>> from operator import itemgetter
>>> lst = sorted(d.iteritems(), key=itemgetter(1))
>>> for t in lst: print '%s : %d' % (t[0], t[1])
... 
c : 3
a : 4
b : 12

可以使用sortedkey参数按第二项排序:

>>> 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
>>> 

编辑:一行,顺序相反:

>>> d = {"a": 4, "c": 3, "b": 12}
>>> [(k, v) for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True)]
[('b', 12), ('a', 4), ('c', 3)]
>>> 

相关问题 更多 >

    热门问题