2017-10-12 1 views
-1

다른 목록의 키와 값으로 사전을 반환하는 함수를 만들고 있습니다. 그러나 나는 사전의 가치로서 숫자의 목록을 얻는데 문제가있다. 그러나, 나는 열쇠를 제대로 얻고 있다고 생각한다.사전에 값을 지정하는 방법

def exp (magnitudes,measures): 
    """return for each magnitude the associated mean of numbers from a list""" 
dict_expe = {} 
for mag in magnitudes: 
    dict_expe[mag] = 0 
    for mea in measures: 
     summ = 0 
    for n in mea: 
     summ += n 
     dict_expe[mag] = summ/len(mea) 


     return dict_expe 

print(exp(['mag1', 'mag2', 'mag3'], [[1,2,3],[3,4],[5]])) 

출력은 다음과 같아야합니다 :

{mag1 : 2, mag2: 3.5, mag3: 5} 

을하지만 내가 얻고 것은 모든 키의 값으로 항상 5 이것은 내가 지금까지 무엇을 얻을 수 있습니다. 나는 zip() 메서드에 대해 생각했지만 im은 두리스트에서 같은 길이를 다시 사용하기 때문에 그것을 피하려고했습니다.

답변

0

시퀀스 평균은 sum(sequence)/len(sequence)이므로 magnitudesmeasures을 반복해야하며 이러한 평균 (산술 평균)을 계산하여 사전에 저장하십시오.

당신이 이것을 달성 할 수있는 훨씬 더 많은 방법이 있습니다. 모든 결과는 {'mag1': 2.0, 'mag2': 3.5, 'mag3': 5.0}입니다.

for i in range() 루프를 사용 :

def exp(magnitudes, measures): 
    means = {} 
    for i in range(len(magnitudes)): 
     means[magnitudes[i]] = sum(measures[i])/len(measures[i]) 
    return means 

print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]])) 

을하지만 당신은 목록의 두 인덱스와 값을 필요로하는 경우이 경우에 훨씬 더 적합 for i, val in enumerate(sequence) 접근 사용할 수 있습니다

def exp(magnitudes, measures): 
    means = {} 
    for i, mag in enumerate(magnitudes): 
     means[mag] = sum(measures[i])/len(measures[i]) 
    return means 

print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]])) 

또 다른 문제의 가죽을 여기에 i 색인은 magnitudes에 속하지만 우리는 또한 measures에서 값을 얻고 있습니다.이 값은 magnitudes과인 경우 큰 문제는 아닙니다.같은 길이이지만 magnitudes이 더 커지면 IndexError이됩니다. 그래서 그것은 내게 같다 zip 함수를 사용하는 것이 가장 좋은 선택이 될 것입니다 (실제로 파이썬 3.6에서는 두 개의리스트가 같은 길이가 될 필요가 없으며 단지 길이가 가장 짧은 것의 길이를 사용합니다. 결과) :

def exp(magnitudes, measures): 
    means = {} 
    for mag, mes in zip(magnitudes, measures): 
     means[mag] = sum(mes)/len(mes) 
    return means 

print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]])) 

그래서 당신이 좋아하고 문서화 문자열을 추가하는 것을 잊지 않는 하나의 요구 사항에 맞는 예를 사용하여 주시기 바랍니다.

당신이 같은 파이썬 방법이 필요하지 않지만 사전 이해가 활동하기 시작하는 때도 짧아 질 수 있습니다 가능성 :

def exp(magnitudes, measures): 
    return {mag: sum(mes)/len(mes) for mag, mes in zip(magnitudes, measures)} 

print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]])) 
관련 문제