python 사전 의 값(값 은 목록)할당 에 중복 되 는 문 제 를 해결 합 니 다.

이 문 제 를 겪 은 사람 이 별로 없 을 수도 있 고 인터넷 에서 도 찾 지 못 했 을 수도 있 습 니 다.여기 기록 해 보 세 요.다른 사람 에 게 도 도움 이 되 었 으 면 좋 겠 습 니 다.
문제 설명:사전 data 가 있다 고 가정 하면 키 가 정 해 지지 않 고 수시로 키 를 추가 할 수 있 습 니 다.(이것 은 관건 이 아 닙 니 다)특정한 키 아래 에 대응 하 는 값 은 길이 가 10 인 list 이 고 0 으로 초기 화 된 다음 에 저 는 특정한 키 아래 의 목록 중의 특정한 값 을 수정 하고 싶 습 니 다.예 를 들 어 data 는 키'k'가 있 고 해당 하 는 값 은[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,지금 나 는 키'k'에 대응 하 는 목록 의 세 번 째 수 를 3 으로 바 꾸 고 싶다.즉,[0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.
구체 적 인 코드 는 다음 과 같다.

data = {}
indexes = ['new','repeat']
ret = [{'i':1,'new':3,'repeat':11},{'i':3,'new':2,'repeat':6},
    {'i':4,'new':9,'repeat':2},{'i':9,'new':1,'repeat':8}]
y_axis = [0]*10
for e in ret:
  for index in indexes:
    if not data.has_key(index):
      data[index] = y_axis
  i = e['i']
  for index in indexes:
    data[index][i] = e[index]
print data
코드 를 알 아 보기 어렵 지 않 습 니 다.저 는 이론 적 으로 수출 해 야 한다 고 생각 합 니 다.{'new':[0,3,0,2,9,0,0,0,0,0,0,1],'repeat':[0,11,6,0,2,0,0,8],'repeat':[0,11,0,6,2,0,0,0,8],'repeat':[0,11,0,6,0,0,0,0,0,0,0,0,8].왠 지 모 르 게 디 버 깅 을 준비 하고 먼저 import pdb,pdb,끊 어야 할 앞 문장 에 pdb.set 추가trace()하면 됩 니 다.다음 과 같 습 니 다.

import pdb
data = {}
indexes = ['new','repeat']
ret = [{'i':1,'new':3,'repeat':11},{'i':3,'new':2,'repeat':6},
    {'i':4,'new':9,'repeat':2},{'i':9,'new':1,'repeat':8}]
y_axis = [0]*10
for e in ret:
  for index in indexes:
    if not data.has_key(index):
      data[index] = y_axis
  i = e['i']
  for index in indexes:
    pdb.set_trace()
    data[index][i] = e[index]
print data
이 어 python test.py,할당 data 키 에 대응 하 는 목록 의 한 값 에 대한 말:
python字典对值(值为列表)赋值出现重复
data 와 index 값 보기:
python字典对值(值为列表)赋值出现重复
정상다음 단 계 를 실행 합 니 다.즉,할당 작업 을 실행 하고 data 값 을 봅 니 다.
python字典对值(值为列表)赋值出现重复
여기 서 정말 mdblgl 한 마디 하고 싶 습 니 다.분명히 index 는'new'입 니 다.분명히 data[new][1]에 대한 할당 입 니 다.data[repeat][1]와 관련 된 것 입 니 다.그것 은 무엇 을 따라 변 합 니까?가히 짐작 할 수 있 듯 이 뒤에 data[repeat][1]에 값 11 을 하나 더 부여 하면'new'의 값 도 함께 변 하지 않 고 결국 마지막 에 알 수 없 는 결 과 를 얻 게 된다.
많은 방법 을 시도 해 보 았 지만 여러 가지 원인 을 생각해 보 았 습 니 다.무뢰한 은 재능 이 부족 하고 학문 이 얕 습 니 다.무슨 원리 인지 모 르 겠 습 니 다.결국 아주 어 리 석 은 방법 으로 해결 할 수 밖 에 없 었 습 니 다.

data = {}
indexes = ['new','repeat']
ret = [{'i':1,'new':3,'repeat':11},{'i':3,'new':2,'repeat':6},
    {'i':4,'new':9,'repeat':2},{'i':9,'new':1,'repeat':8}]
y_axis = [0]*10
tmp = y_axis*len(indexes)
for k in range(len(indexes)):
  for e in ret:
    i = e['i']
    tmp[i+len(y_axis)*k] = e[indexes[k]]
for k in range(len(indexes)):
  data[indexes[k]] = tmp[(k*len(y_axis)):((k+1)*len(y_axis))]
print data
여기 서 왜 이런 사내 가 지적 해 주 는 지 알 고 싶 습 니 다.대단히 감사합니다!
이상 python 사전 의 값(값 은 목록)할당 에 중복 되 는 문 제 를 해결 하 는 것 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기