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
는 이며 기본적으로 키(문자열)에 대해서만 반복합니다.
부터self.materials
키가 두 개 이상 있음*. "에 압축을 풀 수 없습니다.k, m
따라서 예외가 제기됩니다.
Python 2.x에서는 키와 값을 반복합니다( "k, m
"), 를 사용합니다.
그러나 키를 삭제할 경우 사전의 값을 반복할 수 있습니다.
for m in self.materials.itervalues():
Python 3.x에서 사전 보기 개체를 반환하는 prefer:
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))
사전 객체를 반복하면 실제로 키를 반복할 수 있습니다.Python은 키의 압축을 풀려고 시도하고 있습니다.m.type + m.purity
안으로(m, k)
.
나의 수정 구슬이 말합니다.m.type
그리고.m.purity
둘 다 문자열이므로 키도 문자열입니다.문자열은 반복 가능하므로 압축을 풀 수 있지만 문자열을 반복하면 문자를 반복할 수 있습니다.그래서 언제든지m.type + m.purity
값이 너무 많아서 풀 수 없습니다. (그리고 더 짧을 때마다 풀 수 있는 값이 너무 적습니다.)
이 문제를 해결하려면 다음을 통해 명시적으로 반복할 수 있습니다.items
예상되는 것처럼 보이는 (키, 값) 쌍인 딕트의.그러나 값만 원하는 경우에는 값만 사용합니다.
(2.x에서는itervalues
,iterkeys
,그리고.iteritems
일반적으로 더 나은 아이디어입니다; 비-iter
버전은 값/키/키를 포함하는 새 목록 개체를 만듭니다.대규모 사전과 반복 내의 사소한 작업의 경우, 이것은 다음보다 훨씬 느릴 수 있습니다.iter
반복기를 설정하는 버전입니다.)
언급URL : https://stackoverflow.com/questions/7053551/python-valueerror-too-many-values-to-unpack
'sourcetip' 카테고리의 다른 글
환경 이름(IHosting Environment) 설정 방법.환경 이름)? (0) | 2023.06.12 |
---|---|
Microsoft T-SQL에서 Oracle SQL로 변환 (0) | 2023.06.12 |
vuex 스토어는 setTimeout 이후에만 사용할 수 있는 이유는 무엇입니까? (0) | 2023.06.07 |
C에서 "포장된" 구조는 무엇입니까? (0) | 2023.06.07 |
Makefile:1: *** 구분 기호가 없습니다.이제 그만 (0) | 2023.06.07 |