如何通过数据的特定部分对python中的数据进行排序?

时间:2014-03-23 02:32:14

标签: python sorting python-2.7

我的字典中有数据,我使用命令

将其打印出来
for i in mycount.items():
    print i 

结果是

('cooking', Counter({'VG': 26, 'N': 6}))
('Manager', Counter({'N': 1}))
('Hamilton', Counter({'NP': 17}))
('designing', Counter({'VG': 8, 'N': 1}))
('Niagara', Counter({'NP': 2}))
('hallucinating', Counter({'VG': 1}))
('succumb', Counter({'V': 1}))
('shocks', Counter({'N': 4, 'VBZ': 1}))
('crouch', Counter({'N': 2, 'V': 2}))

我希望将最终输出作为单词列表,按最高数字排列到最低数字:

cooking   VG_26 N_6
Hamiliton NP_17
designing VG_8

我的问题是如何根据数据的特定部分对数据进行排序?我正在使用itemgetter但结果如下:(这是整个数据的部分结果)

for x in sorted(mycount.items(), key=itemgetter(1), reverse=True)[0:50]:
    print json.dumps(x)

["best", {"ADV": 51, "DET": 3, "ADJ": 286, "V": 1}]
["open", {"ADV": 8, "N": 4, "ADJ": 238, "V": 55}]
["better", {"ADV": 159, "DET": 4, "ADJ": 233, "V": 6}]
["right", {"ADV": 75, "DET": 121, "ADJ": 222, "N": 179}]

注意:完成排序后,我会将数据清理为所需的格式。 请指导我。先谢谢你。

1 个答案:

答案 0 :(得分:2)

你可能想要:

sorted(mycount.items(), key=lambda kv: [c[1] for c in kv[1].most_common()], revers=True)

e.g。按计数器中包含的计数排序,从最高到最低。

通过使用Counter().most_common(),我们按排序顺序获取Counter的键和值,让我们选择频率作为排序键;因为我们考虑了所有频率Niagaracrouch后排序,因为后者列出的频率更高。

演示:

>>> from pprint import pprint
>>> pprint(sorted(mycount.items(), key=lambda kv: [c[1] for c in kv[1].most_common()], reverse=True))
[('cooking', Counter({'VG': 26, 'N': 6})),
 ('Hamilton', Counter({'NP': 17})),
 ('designing', Counter({'VG': 8, 'N': 1})),
 ('shocks', Counter({'N': 4, 'VBZ': 1})),
 ('crouch', Counter({'N': 2, 'V': 2})),
 ('Niagara', Counter({'NP': 2})),
 ('Manager', Counter({'N': 1})),
 ('hallucinating', Counter({'VG': 1})),
 ('succumb', Counter({'V': 1}))]