Python ValueError : 압축을 풀기에는 값이 너무 많습니다
이 질문에는 이미 답변이 있습니다.
이 코드에서 예외가 발생합니다.
class Transaction:
def __init__ (self):
self.materials = {}
def add_material (self, m):
self.materials[m.type + m.purity] = m
def serialize (self):
ser_str = 'transaction_start\n'
for k, m in self.materials:
ser_str += m.serialize ()
sert += 'transaction_end\n'
return ser_str
for
라인은 예외를 던지는 것입니다. m
들입니다 Material
오브젝트. 아무도 왜 아이디어가 있습니까?
self.materials
은 dict
기본적으로 키 (문자열)를 반복합니다.
이후 self.materials
두 개의 키 이상 보유 * 그들은로 압축 해제 할 수 없다 tuple
" k, m
,"따라서 예외가 발생된다.ValueError
Python 2. x 에서는 키와 값 ( tuple
" k, m
") 을 반복하기 위해을 사용 self.materials.iteritems()
합니다.
그러나 어쨌든 키를 버리고 있기 때문에 단순히 사전 값을 반복 할 수도 있습니다.
for m in self.materials.itervalues():
Python 3에서 x 는 dict.values()
( 사전 뷰 객체 를 반환) 선호 합니다 .
for m in self.materials.values():
for k, m in self.materials.items():
예:
miles_dict = {'Monday':1, 'Tuesday':2.3, 'Wednesday':3.5, 'Thursday':0.9}
for k, v in miles_dict.items():
print("%s: %s" % (k, v))
사전 객체 자체를 반복하면 실제로 해당 키에 대한 반복자가 제공 됩니다 . 파이썬은에서 얻을 압축을 풀고 키에 노력하고있다 m.type + m.purity
으로 (m, k)
.
내 수정 구슬은 말 m.type
과 m.purity
줄이기 때문에 열쇠도 줄입니다. 문자열은 반복 가능하므로 압축을 풀 수 있습니다. 그러나 문자열을 반복하면 해당 문자를 반복 할 수 있습니다. 따라서 m.type + m.purity
길이가 2자를 초과하면 압축을 풀기에는 값이 너무 많습니다. (짧을 때마다 압축을 풀기에는 값이 너무 적습니다.)
이 문제를 해결하기 위해 items
예상되는 (키, 값) 쌍 인 dict의 명시 적으로 반복 할 수 있습니다 . 그러나 값만 원하면 값을 사용하십시오.
(2.x,, itervalues
및 iterkeys
, iteritems
일반적으로 더 나은 아이디어입니다; 비 iter
버전은 값 / 키 / 항목을 포함하는 새로운 목록 객체를 생성합니다. 반복 내의 큰 사전과 사소한 작업의 경우, 이보다 훨씬 느릴 수 있습니다. iter
반복자를 설정 한 버전)
참고 URL : https://stackoverflow.com/questions/7053551/python-valueerror-too-many-values-to-unpack
'IT박스' 카테고리의 다른 글
Matplotlib을 사용하여 Python에서 시간 플로팅 (0) | 2020.06.19 |
---|---|
Entity Framework EF 코드가있는 ASP.NET MVC의 StringLength 및 MaxLength 특성 (0) | 2020.06.19 |
CIFS 연결을 강제로 마운트 해제하는 방법 (0) | 2020.06.19 |
T-SQL-기본 매개 변수가있는 기능 (0) | 2020.06.19 |
C # 오류 : 부모에 인수가 0 인 생성자가 없습니다. (0) | 2020.06.19 |