각 키가 평가판 식별 이름이고 관련 값이 정수 (예 : { 'a': [1,3,4,2,1], 'b')로 여러 요소가 포함 된 목록 인 사전을 만들려고합니다. : [34,5,3,23]} 나는 더미 데이터로 시작하고 for 루프와 append ()를 사용할 때 원래 데이터를 직접 변경한다고 생각했습니다. 내 사전에 추가하려고 할 때 이런 일이 발생한다고 결정했지만 이유를 이해하지 못합니다.
내 더미 값과 코드는 다음과 같습니다.
plane1 = [1,1,1]
plane2 = [2,2,2]
plane3 = [3,3,3]
plane4 = [4,4,4]
zList = [plane1,plane2,plane3,plane4]
trial_list = ['a', 'b', 'c']
roi_dict = {}
for trial in trial_list:
print(trial)
for z in zList:
if trial not in roi_dict.keys():
roi_dict[str(trial)] = z
else:
roi_dict[str(trial)].append(z)
최종 roi_dict는
{'a': [1, 1, 1, [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4]], 'b': [1, 1, 1, [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4]], 'c': [1, 1, 1, [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4]]}
과
print(z_list[0])
[1, 1, 1, [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4], [2, 2, 2], [3, 3, 3], [4, 4, 4]]
A) 키의 처음 세 요소가 개별 숫자이고 다음 요소는 목록 인 이유를 이해할 수 없습니다. B) 각 키에 대해 값이 [1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4]가 아닌 이유. C) 이것이 func_list의 첫 번째 값을 변경하는 이유.
이것을 여러 질문으로 나누어야한다면 기쁠 것 같지만 모두 같은 문제에서 비롯된 것 같습니다.
감사합니다!
zList
목록의 목록입니다. 당신은
if trial not in roi_dict.keys(): roi_dict[str(trial)] = z # z being intem from zList else: roi_dict[str(trial)].append(z)
사용자가 설정 한 의미 roi_dict[str(trial)]
로 z
.
그런 다음 추가 roi_dict[str(trial)]
-목록은 참조에 의해 사용되므로 본질적으로 roi_dict[str(trial)]
== z
이고 추가 반복에서 수정할 zList[0]
때 수정합니다 roi_dict[str(trial)].append(z)
.
코드를 다음으로 변경하십시오.
import copy
if trial not in roi_dict.keys():
roi_dict[str(trial)] = [copy.deepcopy(z)]
else:
roi_dict[str(trial)].append(z)
두 가지 문제를 모두 해결합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다