【发布时间】:2015-07-06 19:47:59
【问题描述】:
问题
我正在尝试计算字符串列表的频率并按降序对其进行排序。 scipy.stats.itemfreq 生成频率结果,这些结果作为字符串元素的 numpy 数组输出。这就是我难过的地方。如何排序?
到目前为止,我已经尝试过operator.itemgetter,它似乎适用于一个小列表,直到我意识到它是按第一个字符串字符排序而不是将字符串转换为整数,所以'5' > '11' 因为它正在比较5和1 不是5 和11。
我正在使用 python 2.7、numpy 1.8.1、scipy 0.14.0。
示例代码:
from scipy.stats import itemfreq
import operator as op
items = ['platypus duck','platypus duck','platypus duck','platypus duck','cat','dog','platypus duck','elephant','cat','cat','dog','bird','','','cat','dog','bird','cat','cat','cat','cat','cat','cat','cat']
items = itemfreq(items)
items = sorted(items, key=op.itemgetter(1), reverse=True)
print items
print items[0]
输出:
[array(['platypus duck', '5'],
dtype='|S13'), array(['dog', '3'],
dtype='|S13'), array(['', '2'],
dtype='|S13'), array(['bird', '2'],
dtype='|S13'), array(['cat', '11'],
dtype='|S13'), array(['elephant', '1'],
dtype='|S13')]
['platypus duck' '5']
预期输出:
我正在订购这样的东西:
[array(['cat', '11'],
dtype='|S13'), array(['platypus duck', '5'],
dtype='|S13'), array(['dog', '3'],
dtype='|S13'), array(['', '2'],
dtype='|S13'), array(['bird', '2'],
dtype='|S13'), array(['elephant', '1'],
dtype='|S13')]
['cat', '11']
总结
我的问题是:如何按计数的降序对数组(在本例中为字符串数组)进行排序?请随时为我上面的代码示例建议替代和更快/改进的方法。
【问题讨论】:
标签: python arrays sorting numpy scipy