如何按值对字典进行排序并返回格式化字符串列表?

时间:2011-01-26 04:09:57

标签: python list dictionary string-formatting

我有一个字典:

text_to_count = { "text1": 1, "text2":0, "text3":2}

我想通过对此dict的值进行排序(按降序排列)来创建格式化字符串列表。

即,我喜欢以下列表:

result = ["2 - text3", "1 - text1", "0 - text2"]

有什么想法吗?

修改

在等待回复的同时,我一直在攻击它并提出:

result = map(lambda x: "{!s} - {!s}".format(x[1], x[0]), 
                       sorted(text_to_count.iteritems(), 
                       key = lambda(k, v): (v, k), reverse=True ))

我仍然有兴趣了解其他解决方案,可能还有一个更好。

3 个答案:

答案 0 :(得分:2)

['%d - %s' % (v, k) for (k, v) in sorted(text_to_count.iteritems(),
    key=operator.itemgetter(1), reverse=True)]

答案 1 :(得分:1)

这是怎么回事?

result = ['{1} - {0}'.format(*pair) for pair in sorted(text_to_count.iteritems(), key = lambda (_,v): v, reverse = True)]

答案 2 :(得分:0)

还有一个,codegolf风格:

>>> ['%s - %s'%(t[x],x) for x in sorted(t,key=t.get)[::-1]]
['2 - text3', '1 - text1', '0 - text2']

PS。为了说明Ignacio Vazquez-Abrams评论提出的观点,请注意如果有重复值,排序结果会有所不同:

>>> t={'txt1':1, 'txt2':0, 'txt3':1}
>>> ['%s - %s'%(t[x],x) for x in sorted(t,key=t.get)[::-1]]

['1 - txt3 ','1 - txt1 ','0 - txt2']

>>> ['%s - %s'%(t[x],x) for x in sorted(t,key=t.get,reverse=True)]

['1 - txt1 ','1 - txt3 ','0 - txt2']