2014-10-16 6 views
1

완료해야하는 빠른 작업에 대한 도움이 필요합니다. 내가 값의 다음 부분 집합 사전을 가지고파이썬 사전에서 최고 값 찾기

...

{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'], 

사전은 키 structred됩니다 : ID 번호, 값 : 카운트 타이틀이 사전을 구성하고 정상을 인쇄해야 COUNT 기준 5 키.

현재이 코드를 내놓았다,하지만 내가 필요한 일을하지 않는 것 :

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

현재 problem2 인쇄 :

{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의 첫 번째. 사전에있는 모든 도움을

덕분에! 기억하십시오, 파이썬 2.4이 아닌 2.7 :(제약 조건에 대한 작업을 계속해야합니다. 정의 dicts으로

+1

다시 dict로 변환하지 마십시오. dicts에는 순서가 없습니다. 또는 정렬 된 출력을'collections.OrderedDict'에 전달하십시오. –

+1

또한 ['heapq.nlargest'] (https://docs.python.org/2/library/heapq.html#heapq.nlargest)를보십시오 : from heapq import nlargest; nlargest (5, d.iteritems(), key = operator.itemgetter (1))' 이러한 작업에 훨씬 적합합니다. –

+1

필자는 2.4 파이썬의 제약 조건을 가지고 있으며, 콜렉션은 허용되지 않습니다 : ( –

답변

2

가 정렬되지 않은 데이터 구조입니다. 당신은을 보장하려면 위해, 당신은 파이썬의 이전 버전을 사용하는 경우 당신은 내가 수동으로 순서를 유지해야 함을 두려워 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'])]) 
>>> 

를 사용해야합니다 그래서 당신은 키의 정렬 된 목록을 유지하고 원래 딕셔너리

에 액세스해야합니다
>>> 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

저는 2.4 파이썬의 제약 조건을 가지고 있습니다. 컬렉션은 허용되지 않습니다 : ( –

1

일반 사전은 요소의 순서를 유지하지 않습니다. 그래서, 당신은 딕셔너리를 사용하여 그를 정렬 dict.items()를 사용하여 튜플의리스트로 변환하지 마십시오이

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

저는 2.4 파이썬의 제약 조건을 가지고 있습니다. 콜렉션은 허용되지 않습니다 : –

1

처럼 collections.OrderedDict를 사용해야합니다.

>>> 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']