sourcetip

Python ValueError: 값이 너무 많아 압축을 풀 수 없습니다.

fileupload 2023. 6. 7. 23:06
반응형

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

반응형