객체를 반복하는 동안 빌드되는 사전이 있습니다. 이제 동일한 객체를 여러 번 액세스 할 수 있습니다. 그리고 객체 자체를 키로 사용하고 있습니다.파이썬 (Python) - 동일한 객체를 랩핑하여 고유하게 만듭니다.
그래서 동일한 객체에 두 번 이상 액세스하면 키가 고유하지 않게되고 사전이 더 이상 올바르지 않게됩니다.
개체별로 액세스해야하지만 이후에 누군가가 콘텐츠에 액세스하려고하므로 나중에 현재 개체로 액세스하도록 요청할 수 있습니다. 그리고 그것은 그때 마지막 활성 객체에 접근하기 때문에 정확할 것입니다.
그래서 개체를 어떻게 든 감쌀 수 있는지 궁금해서 상태와 모든 특성을 동일하게 유지할 수 있지만 유일한 차이점은이 새로운 종류의 개체가 실제로 고유하다는 것입니다. 예를 들어
:
dct = {}
for obj in some_objects_lst:
# Well this kind of wraps it, but it loses state, so if I would
# instantiate I would lose all information that was in that obj.
wrapped = type('Wrapped', (type(obj),), {})
dct[wrapped] = # add some content
지금 이것보다 더 좋은 대안이 있다면, 나도 그것을 듣고 싶습니다.
P. 반복되는 객체는 다른 컨텍스트에 있으므로 객체가 같더라도 다르게 처리됩니다. 문제가 어디에서 오는지
업데이트 요청으로
이 더 나은 예를 제공 :
나는이 엑셀 발전기 모듈을보고 있습니다. 이를 사용하여 다양한 Excel 보고서를 생성 할 수 있습니다. 이를 위해 Python 사전을 사용하여 구성을 작성해야합니다.
이제 보고서가 생성되기 전에 두 가지 작업을 수행해야합니다. 메타 데이터 (여기서 메타 데이터는 보고서가 작성 될 때 각 셀의 위치입니다.)와 두 번째로 구성을 분석하여 셀에 내용을 채 웁니다.
이 모듈에서 사용할 수있는 값 유형 중 하나는 공식 (Excel 수식)입니다. 그리고 내 질문에 문제가 수식을 계산할 수있는 방법 중 하나를 구체적으로 있습니다 : 수식 값은 부모, 그 하위에있는 검색됩니다.
이는 예를 들어 엑셀 파일 구조 상상 : 셀 (1A)의이 예시적인 합 지금
A | B | C
Total Childs Name Amount
1 sum(childs)
2 child_1 10
3 child_2 20
4 sum(childs)
...
을 합이에서 (그들의 차일 열 합계 식을 사용하는 경우 10 + 20 = 30 될 필요 케이스 C
칼럼). 그리고이 모든 것은 동일한 객체 (iterables라고 부름)가 반복 될 때까지 작동합니다. 메타 데이터를 만들 때 저장해야하므로 나중에 검색해야합니다. 그리고 열쇠는 반복되는 객체입니다. 이제 값을 파싱 할 때 다시 반복 될 때 일부 정보가 동일한 객체로 덮어 쓰기 때문에 모든 정보가 표시되지 않습니다.
예를 들어 인보이스 오브젝트가 있다고 가정하면 인보이스와 관련된 파트너 오브젝트가 있으며 지정된 인보이스 및 파트너가 특정 금액을 생성하는 다른 임의의 오브젝트가 있습니다. Excel에서 이러한 정보를 추출 할 때
은 그래서, 이렇게되면 예에서
inoice1 -> partner1 -> amount_obj1, amount_obj2
invoice2 -> partner1 -> amount_obj3, amount_obj4.
공지 사항이 파트너가 동일합니다.값을 구문 분석 할 때 내가 설명하는 경우 메타 데이터가 실제로
PS는 몰라amount_obj3
및 amount_obj4
값을 개최한다 때, 나는 두 번이 개체를 반복하기 때문에 내가 열쇠로이를 저장할 수 없기 때문에 여기에서 문제는, 더 많은 코드가 있기 때문에 코드의 거대한 벽을 여기에 넣고 싶지는 않습니다.
갱신 2
내가 너무 특정되는 것 때문에 단지 더 많은 사람들을 혼란, 더 추상적 각도에서이 문제를 설명하려고합니다.
주어진 개체 목록과 빈 사전, 사전은 개체를 반복하여 작성됩니다. 개체는 사전에서 키 역할을합니다. 나중에 사용되는 메타 데이터가 포함되어 있습니다.
같은 목록을 다른 목적으로 다시 반복 할 수 있습니다. 완료되면 iterated 오브젝트 (해당 사전의 키와 동일한 오브젝트)를 사용하여 사전 값에 액세스해야합니다. 그러나 문제는 동일한 객체가 두 번 이상 사용 된 경우 해당 키에 대해 최근 저장된 값만 포함된다는 것입니다.
여기서 개체는 고유 한 키가 아닙니다. 하지만 문제는 내가 (값을 검색해야 할 때) 객체 만 아는 유일한 것입니다. 그러나 동일한 반복이기 때문에 동일한 객체를 두 번 액세스 할 때 반복의 특정 인덱스는 동일합니다.
그럼 고유성은 내가 생각하기에 (index, object)
입니다.
두 번째 단락과 모순되는 점 (* 키가 고유하지 않고 내 사전이 더 이상 정확하지 않음 *)과 세 번째 단락 (*이 시점에서 마지막 활성 개체에 액세스 *) : 왜 값을 바꿉니 까? 마지막으로 활성 객체에 액세스하는 것이 다른 경우 다른 문제가 있습니까? dict의 기본 동작이 문제가되는 것 같습니다. – mguijarr
글쎄, 이건 너무 생각했지만 작동하지 않습니다. 하지만 어쩌면 당신이 맞고 실제로 코드에 버그가있어서 기대 한 것보다 다른 결과를 얻을 수 있습니다. (나는 다른 부분에서 내용을 얻을 것으로 기대합니다. 다른 키를 의미합니다) – Andrius
어쩌면 더 많은 컨텍스트 정보를 제공 할 수 있습니다. 더 명확하게하기 위해하고있는 일은 무엇입니까? – mguijarr