본문 바로가기
파이썬

파이썬 .values ​​() 등을 사용하지 않고 사전에서 값의 평균 찾기

by º기록 2020. 12. 20.
반응형

다음과 같은 사전이 있습니다.

G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}

예를 들어 값의 평균을 찾아야합니다. .values ​​() , .items () <와 같은 내장 함수를 사용하지 않고 간단한 for 루프를 사용하는 mean (18,17,19,15,0) / code> 등. 다음을 시도했지만 오류가 발생합니다.

d=[float(sum(values)) / len(values) for key, values in G]
    return (d)   
ValueError: need more than 1 value to unpack

누군가이 문제를 해결하도록 도울 수 있습니까 ????

 

해결 방법

 

"간단한 for 루프"로이를 수행하려면 dict 메서드 사용에 대한 제약 조건을 사용합니다.

G = {'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}


count = 0
_sum = 0
for key in G:
    count += 1
    _sum += G[key]

print('this is the mean: ', _sum/count)

dict 메서드를 피해야한다면 분명히 이것은 학문적 연습입니다.

그 제약없이 :

표준 라이브러리의 statistics 모듈에는 mean 메소드가 있습니다. 이는 제 생각에 처음입니다 (표준 라이브러리에는 타사 패키지가 필요하지 않기 때문).

>>> G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
>>> from statistics import mean
>>> mean(G[k] for k in G)
13.8

numpy 및 pandas와 같은 타사 패키지에는 mean 메소드가있는 객체가 있습니다.

>>> from numpy import array
>>> array([G[k] for k in G]).mean()
13.8

>>> from pandas import Series
>>> Series([G[k] for k in G]).mean()
13.8

values ​​() 메서드를 사용하도록 허용하면 반복 가능한 언 패킹으로 조금 더 간단 해집니다. 어떤 이유로 다른 답변이 해당 조건을 위반하므로보다 효율적인 방법을 보여야한다고 생각합니다.

>>> Series([*G.values()]).mean()
13.8

 

참조 페이지 https://stackoverflow.com/questions/22416450

 

 

반응형

댓글