IT박스

Python ValueError : 압축을 풀기에는 값이 너무 많습니다

itboxs 2020. 6. 19. 19:56
반응형

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.materialsdict기본적으로 키 (문자열)를 반복합니다.

이후 self.materials두 개의 키 이상 보유 * 그들은로 압축 해제 할 수 없다 tuple" k, m,"따라서 예외가 발생된다.ValueError

Python 2. x 에서는 키와 값 ( tuple" k, m") 을 반복하기 위해을 사용 self.materials.iteritems()합니다.

그러나 어쨌든 키를 버리고 있기 때문에 단순히 사전 값을 반복 할 수도 있습니다.

for m in self.materials.itervalues():

Python 3에서 xdict.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.typem.purity줄이기 때문에 열쇠도 줄입니다. 문자열은 반복 가능하므로 압축을 풀 수 있습니다. 그러나 문자열을 반복하면 해당 문자를 반복 할 수 있습니다. 따라서 m.type + m.purity길이가 2자를 초과하면 압축을 풀기에는 값이 너무 많습니다. (짧을 때마다 압축을 풀기에는 값이 너무 적습니다.)

이 문제를 해결하기 위해 items예상되는 (키, 값) 쌍 인 dict의 명시 적으로 반복 할 수 있습니다 . 그러나 값만 원하면 값을 사용하십시오.

(2.x,, itervaluesiterkeys, iteritems일반적으로 더 나은 아이디어입니다; 비 iter버전은 값 / 키 / 항목을 포함하는 새로운 목록 객체를 생성합니다. 반복 내의 큰 사전과 사소한 작업의 경우, 이보다 훨씬 느릴 수 있습니다. iter반복자를 설정 한 버전)

참고 URL : https://stackoverflow.com/questions/7053551/python-valueerror-too-many-values-to-unpack

반응형