我基本上试图遍历一个字典并打印出从最大值到最低值的键/值。我一直在搜索这个网站,很多人都在使用lambda,但我不确定它是如何工作的,所以我现在试图避免它。
dictIterator = iter(sorted(bigramDict.iteritems()))
for ngram, value in dictIterator:
print("There are " + str(value) + " " + ngram)
查看上面的代码,我假设它会生成一个迭代器,它按从大到小的顺序返回键/值对,但不是。
有人能看出问题所在吗?或另一种方法吗?
答案 0 :(得分:20)
通过将第一个元素视为比第二个元素更重要等,可以利用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')]
答案 1 :(得分:19)
您可以使用key
的{{1}}参数按第二项排序:
sorted
答案 2 :(得分:2)
>>> 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
答案 3 :(得分:0)
d = { "a":4, "c":3, "b":12 }
for v in sorted( d.values() ):
for key in d:
if d[ key ] == v:
print key, v
break
答案 4 :(得分:0)
这是 Python 3 的解决方案:
d = { "a":4, "c":3, "b":12 }
sorted(((v, k) for k, v in d.items()), reverse=True)