在我需要完成的快速任务上需要一些帮助。
我有一个包含以下值子集的词典......
{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 :(约束。
答案 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']