2011-04-28 3 views
0

함수에서 반환 한 특정 특성에 따라 분류 할 개체 목록 (이 예제에서는 문자열)이 있습니다.특정 특성에 따른 개체 그룹화

['sky', 'ocean', 'grass', 'tomato', 'leaf'] 

및 전달 된 문자열의 색상을 반환하는 함수 color(item), 예를 들면 :

예를 들어, 다음 목록을 고려 color('sky')'blue'을 반환합니다. 이제는 목록을 사전이나 함수의 반환 값에 따라 항목을 그룹화하는 목록으로 변환하려고합니다. 가능한 결과는 다음과 같습니다

{ 
    'blue': ['sky', 'ocean'], 
    'green': ['grass', 'leaf'], 
    'red': ['tomato'] 
} 

은 그래서 중첩 된 목록이 너무 잘 될 것입니다, 항목이 따라 그룹화 된 것만, 키 자체에 대해 걱정하지 않는다. 그냥 pythonic 방식으로 이것을하려고 :)

답변

5

은 내가이 질문에 대해이 길을 갈 거라고 생각 :

당신에게 색에 의해 키가 목록의 사전을 제공
from collections import defaultdict 

D = defaultdict(list) 

a = ['sky', 'ocean', 'grass', 'tomato', 'leaf'] 

for item in a: 
    D[color(item)].append(item) 

, 즉 그 범주에 대한 항목이 포함되어 있습니다.

+0

을 내가 감사 무엇을 찾고 있었다 – WakiMiko

0
a = ['sky', 'ocean', 'grass', 'tomato', 'leaf'] 

sa = {} 
for x in a: 
    key = color(x) 
    if key in sa: 
    sa[key].append(x) 
    else: 
    sa[key] = [x] 

잘 모르겠지만 그것은 꽤 명확하다. 늦은 버전의 Python에서는 기본 사전을 사용하여 루프의 핵심을보다 깨끗하게 만들 수 있습니다.

0

약간 '풀림'솔루션을 수정 제안했습니다

a = ['sky', 'ocean', 'grass', 'tomato', 'leaf'] 

def color(x): 
    # dummy hash function for demo 
    return len(x) 

color_map = {} 

for x in a: 
    key = color(x) 
    color_map.setdefault(key,[]).append(x) 

print color_map 

위의 코드 예제 인쇄 : 정확히

 
{3: ['sky'], 4: ['leaf'], 5: ['ocean', 'grass'], 6: ['tomato']} 
관련 문제