사전

2012-06-27 2 views
-1

이 숙제 좀 도와주세요 : ({: 1, 2 : 0, 4 : 2, 6 : 1, 9 : 1})사전

makeA

출력해야 이렇게 될 :

[1, 0, 1, 0, 2, 0, 1, 0, 0, 1] 
+5

"코드 줄 수 있습니까?" 너 뭐 해봤 니? – Chowlett

답변

4

는 지능형리스트보십시오 :

def makeA(d, default=0): 
    """Converts a dictionary to a list. Pads with a default element 

    Examples: 

    >>> makeA({0: 1, 2: 1, 4: 2, 6: 1, 9: 1}) 
    [1, 0, 1, 0, 2, 0, 1, 0, 0, 1] 

    >>> makeA({3: 'kos'},'') 
    ['', '', '', 'kos'] 

    """ 
    maxElem = max(d) 
    return [d.get(x, default) for x in range(maxElem+1)] 

함수 본문의 첫 번째 줄은 DICT의 최대 키를 찾습니다를 (때문에객체는 반복 할 때 키를 생성합니다. 최대 키가 5 인 경우 6 개의 요소 [0..6]의 배열이 필요합니다.

마지막 줄은 시퀀스 0 .. maxElem에 대해 목록 이해도를 사용하고이 시퀀스의 각 값에 대해이 키에 대해 d의 값을 지정하고 그렇지 않은 경우 0을 할당합니다.

+6

'd.get (x, 0)'이 더 짧고 간단합니다. – delnan

+0

좋은 점, 고마워요. – Kos

+0

'max (d.keys()) 대신'max (dic)'를 사용하십시오. –

1

예, 목록 이해에 기본값을 사용할 수 있습니다. 하지만 defaultdict 클래스가 대신 할 수있는 스타일이 더 좋다고 생각합니다. 그리고 부팅 할 때 좀 더 읽기 쉬운 코드를 얻을 수 있습니다! :-)

from collections import defaultdict 

def makeA(d): 
    dd = defaultdict(int, d) 
    return [dd[n] for n in range(10)] 


print makeA({0: 1, 2: 1, 4: 2, 6: 1, 9: 1})