2012-02-26 4 views
2

사전을 기준으로 정렬하고 검색해야합니다. 나는 그 사전이 분류 될 수 없다는 것을 안다. 그러나 모든 것을 정렬 된 형식으로 검색해야합니다. 사전 자체는 정렬 할 필요가 없습니다.파이썬에서 사전 검색 및 정렬

2 개의 값이 있습니다. 키이고 키와 연관된 문자열은 정수 값입니다. 정수를 기반으로 정렬 된 표현을 가져와야합니다. 나는 OrderedDict로 그것을 얻을 수있다.

하지만 전체 사전 대신 상위 50 개 값만 인쇄해야합니다. RegEx를 사용하여 일부 키를 추출해야합니다. 'a'와 5 길이로 시작하는 모든 키를 말하십시오.

누군가가 파이썬으로 좋은 형식으로 인쇄하는 법을 알려줄 수 있습니까? 좋아요 :

{'secondly': 2, 
'pardon': 6, 
'saves': 1, 
'knelt': 1} 

한 줄의 insdead. 시간 내 주셔서 감사합니다.

+1

[pprint] (http://docs.python.org/library/pprint.html)를 사용하면 여러 줄에 걸쳐 사전을 예쁜 인쇄 할 수 있습니다. –

답변

3

당신이 다음을 수행 할 수있는 정수 값을 기준으로 사전을 정렬합니다.

[('pardon', 6), ('secondly', 2), ('saves', 1), ('knelt', 1)] 

당신이 a[:50]를 사용하여 상위 50으로 제한하고 개봉 된 검색 패턴으로, 키를 통해 검색 할 수 있습니다

d = {'secondly': 2, 'pardon': 6, 'saves': 1, 'knelt': 1} 
a = sorted(d.iteritems(), key=lambda x:x[1], reverse=True) 

a는 튜플의 목록이 포함됩니다.

1

OrderedDict를 이미 사용하고 있으므로 목록 이해로 필요한 것을 할 수 있습니다. 다음과 같이하십시오 :

[ value for value in d.values()[:50] if re.match('regex', value) ] 

자세한 내용이 필요하면 현재 코드를 게시하십시오. 멀티 라인 꽤 인쇄를 들어

, 필요한 경우 옵션 width 매개 변수 pprint를 사용

In [1]: import pprint 
In [2]: d = {'a': 'a', 'b': 'b' } 
In [4]: pprint.pprint(d) 
{'a': 'a', 'b': 'b'} 
In [6]: pprint.pprint(d,width=20) 
{'a': 'a', 
'b': 'b'} 
1

좋은 서식을 보려면 pprint module을 확인하십시오.

정확하게 이해하고 있다면 OrderedDict은 실제로 원하는 것이 아닙니다. OrderedDict 키가 추가 된 순서를 기억하십시오. 그들은 값을 추적하지 않습니다. 비록 dicionary의 그들은 키

import re, operator 
thedict = {'secondly':2, 'pardon':6, ....} 
pat = re.compile('^a....$') # or whatever 
top50 = sorted(((k,v) for (k,v) in thedict.iteritems() if pat.match(k)), reverse=True, key=operator.itemgetter(1))[:50] 
1

당신 정렬 수 :.

dict = {'secondly': 2, 
     'pardon': 6, 
     'saves': 1, 
     'knelt': 1} 

for key in sorted(dict.keys()): 
    print dict[key] 

이 키에 따라 출력을 정렬합니다 (당신은 초기 데이터를 변환하는 발전기를 사용하여 당신이 원하는 것을 얻을 수 귀하의 경우 알파벳 문자열 값)

1

당신에게 도움을 줄 수있는 몇 가지 도구가 있습니다 :

  • T 그는 sorted 함수는 iterable을 취하고 순서대로 요소를 반복합니다. 그래서 for key, value in d.iteritems()과 같은 말을 할 수 있습니다.
  • filter 함수는 반복 가능 및 함수를 사용하고 함수가 True으로 평가되는 요소 만 반환합니다. 예를 들어, filter(lambda x: your_condition(x), d.iteritems())은 키 - 값 튜플의 목록을 제공 할 것입니다.이 튜플은 위와 같이 정렬 할 수 있습니다. (파이썬 3에서, filter은 반복자를 반환하는데, 이것은 더 좋습니다.)
  • 생성자 표현식을 사용하면 위의 모든 것을 하나로 결합 할 수 있습니다. 예를 들어 값에 대해서만 신경 쓰면 (value for key, value in sorted(d.iteritems()) if condition)이라고 쓰면 반복자가 반환됩니다.
2

정렬 된 dict을 얻는 방법은 여러 가지가 있습니다. sortediteritems()은 친구입니다.

data = {'secondly': 2, 'pardon': 6, 'saves': 1, 'knelt': 1} 

내가 가장 많이 사용하는 패턴은 다음과 같습니다

key = sorted(data.iteritems()) 
print key #[('knelt', 1), ('pardon', 6), ('saves', 1), ('secondly', 2)] 

key_desc = sorted(data.iteritems(), reverse=True) 
print key_desC#[('secondly', 2), ('saves', 1), ('pardon', 6), ('knelt', 1)] 

의 값이 아니라 당신의 분류 무시하려면 키 기능을 필요로하는 키를 정렬하려면.

value = sorted(data.iteritems(), key=lambda x:x[1]) 
print value #[('saves', 1), ('knelt', 1), ('secondly', 2), ('pardon', 6)] 

value_desc = sorted(data.iteritems(),key=lambda x:x[1], reverse=True) 
print value_desC#[('pardon', 6), ('secondly', 2), ('saves', 1), ('knelt', 1)]