在Python字典中查找顶部值

时间:2014-10-16 05:32:34

标签: python list sorting dictionary python-2.4

在我需要完成的快速任务上需要一些帮助。

我有一个包含以下值子集的词典......

{249863: [1, 'Sr. Financial Analyst'], 180241: [1, 'C# .NET Developer - SQL/Databases, Visual Studio 2010, WPF'], 981011: [1, 'Sr. Business Systems Analyst'], 581669: [1, 'Pharmaceutical Sales - Intern'], 641064: [1, 'Software Engineer II -'], 708653: [1, ' Sports Minded  Consultant - Sales - Management - Entry Level'], 41011: [1, 'Regional Revenue Manager- West Coast'], 81979: [1, 'Assistant Buyer'], 401479: [2, 'Valve Technician'], 876619: [1, 'Manufacturing Engineer'],

使用KEY构建字典:ID号,值:Count,Title 我需要组织这个字典并根据COUNT打印前5个键。

目前我已经提出了这个代码,但它似乎没有做我需要的:

problem2 = dict(sorted(task2.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])

目前有问题2打印:

{627329: [1, 'Young Professionals Customer Relations'], 547457: [1, 'iPhone/Android/Mobile OS Apps Developer'], 520659: [1, 'technician/receptionist'], 178789: [2, 'Business Planning Analyst'], 401479: [2, 'Valve Technician']}

但是你可以看到它先打印1个。

提前感谢所有帮助!请记住,我需要保持它适用于Python 2.4,而不是2.7 :(约束。

3 个答案:

答案 0 :(得分:2)

根据定义,dicts是无序数据结构。如果您想保证订单,则必须使用OrderedDict

>>> from collections import OrderedDict
>>> problem2 = OrderedDict(sorted(task2.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
>>> problem2
OrderedDict([(401479, [2, 'Valve Technician']), (249863, [1, 'Sr. Financial Analyst']), (981011, [1, 'Sr. Business Systems Analyst']), (641064, [1, 'Software Engineer II -']), (41011, [1, 'Regional Revenue Manager- West Coast'])])
>>> 

如果您使用的是旧版本的python,我担心您必须手动保留订单,因此您必须维护一个有序的密钥列表,然后访问原始字典

>>> sorted_keys = [i[0] for i in sorted(task2.iteritems(), key=operator.itemgetter(1), reverse=True)[:5]]
>>> task2[sorted_keys[0]]
[2, 'Valve Technician']

答案 1 :(得分:1)

普通词典不会维护其中元素的顺序。因此,您需要使用collections.OrderedDict,就像这样

problem2 = collections.OrderedDict(sorted(task2.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])

答案 2 :(得分:1)

不要使用dict,使用dict.items()将其转换为元组列表,然后对其进行排序。

>>> a = {'x': [2, 'apple'], 'y': [3, 'pear'], 'w': [5, 'banana']}
>>> list(a.items())
[('y', [3, 'pear']), ('x', [2, 'apple']), ('w', [5, 'banana'])]
>>> sorted(a.items(), key=lambda x: x[1][0])
[('x', [2, 'apple']), ('y', [3, 'pear']), ('w', [5, 'banana'])]

或者,您可以在字典中创建键的排序列表,并根据需要使用它来查找顶部/底部键值对。

>>> a_order = sorted(a.keys(), key=lambda x: a[x][0])
>>> a_order
['x', 'y', 'w']