我试图按第三列对字典的输出进行排序,或者更具体地说,按示例结果中出现的值的计数进行排序。对于上下文,最初的答案是:https://stackoverflow.com/a/23199901/666891。我无法从https://stackoverflow.com/a/73050/666891或https://stackoverflow.com/a/613218/666891得出答案,因此我在这里提问。你知道吗
原始产量来自:
for k in ret.keys():
print '%s %d' % (k,ret[k])
结果是:
google com 1132
akamaiedge net 378
bing com 381
microsoft com 197
并尝试:
x = ret.keys()
sorted(x,key=operator.itemgetter(3))
for k in x:
print '%s %d' % (k,ret[k])
结果是:
google com 1132
akamaiedge net 378
bing com 381
microsoft com 197
最后一次尝试:
for k in sorted(ret.keys(),key=operator.itemgetter(3),reverse=True):
print '%s %d' % (k,ret[k])
其结果与第一个类似:
microsoft com 197
akamaiedge net 378
google com 1132
bing com 381
此外,ret.keys()
的值是:
['google com', 'akamaiedge net', 'bing com', 'microsoft com']
我的具体方案是:
for k in sorted(ret.keys(), key=lambda k:ret[k], reverse=True):
print "{:15} - {}".format(k, ret[k])
我坚持最初的解决方案proposed by Burhan Khalid,它利用了^{} :
它使用^{} 方法,该方法本质上是使用
sorted()
按值按相反顺序对字典项进行排序。不需要手动操作。你知道吗仅供参考,以下是
most_common()
源代码在python2.7上的表现:如果您试图基于值进行排序,那么
key
参数应该得到一个函数,该函数可以给出与当前键对应的值,如下所示输出
现在,每当排序算法在字典中选取一个键时,它都会调用
key
函数,这是字典的getter函数,它将给出对应于键的值。因此,与键对应的值将用于比较。你知道吗注意1:上一个代码的问题是,您使用的是
operator.itemgetter(3)
,它将获得键中索引3处的元素。键是字符串,因此键中的第四个字符将用于比较。这就是为什么你问题的最后一个例子按字母顺序
r > m > g
。你知道吗注2:第二个示例的问题是,sorted不改变
x
,它返回一个新列表。所以,您仍然只使用未排序的x
。你知道吗相关问题 更多 >
编程相关推荐