googlecolab 사용하고 있습니다.
[[a,0,0],[0,e,0],[0,h,i]]을 출력하면 {(0,0):a, (1,1):e, (2,1):h, (2,2):i}이렇게 출력이 되게 제작하고 싶습니다.def sparse(sp):
num = {}
x = 0
for n in sp:
if n != 0:
num[x] = n
x += 1
return num
sparse(['a',0,0]) -> {(0): 'a'}
이렇게 리스트가 한개일때 a의 x값을 출력하는 것까지는 제작하였습니다.
for i in range(len(sp)):로 리스트 안의 리스트 값을 추출(?)하는 것까지는 생각했는데
추출(?)된 [a,0,0],[0,e,0],[0,h,i]이 어떻게 해야 앞에서 부터 y값에 0, 1, 2...가 들어가게 하는 법을 모르겠습니다.
for j in i 로 리스트 안의 리스트 안의 값을 추출하셈
걍 for loop 2번 돌리면 되는거 아니냐 - dc App
d = {(x,y):value for value, x, y in sp} 이렇게 dict comprehension 하시면 됩니다.
풀어서 설명 드리면 sp 가 항상 3개의 element를 가진 item을 나열한 list 라고 생각하고 for value,x y in sp 이렇게 unpack 하면서 iteration을 실행합니다
[a,b,c] 면 value에 a, x에 b, y에 c가 대입됩니다.
그리고 dict comprehension을 사용해 (x,y):value 이렇게 넣으면 (x,y) 좌표 튜플이 key로 그 좌표에 들어간 데이터인 value가 dictionary의 value인 dictionary가 생성됩니다.
굳이 dict comprehension을 사용하지 않더라도 d = dict(); for value, x, y in sp:; d[(x,y)] = value; 이렇게 d에 원하는 dictionary를 만드실 수 있습니다. ;을 줄바꿈으로 치환하시면 됩니다.
python 문법에 되려 너무 겁먹지 마시고 python 만큼 자유로운(난해한) 데이터 타입 만질 수 있는 언어가 없으니까 생각대로 코드를 휘갈겨보세요
아니 시발 글 다시 읽어보니까 list에 이상한 값들이 들어있네 데이터의 의미를 다시 설명해주실래요
d = dict()
for y in range(len(sp)):
for x in range(len(sp[y])):
d[(x,y)] = sp[y][x]
이게 진짜 답
물론 위에서 언급한 dict comprenhension 사용해서
d = {(x,y):sp[y][x] for x in range(len(sp)) for y in range(len(sp))}
이렇게 한줄로 표현할 수도있음
comprehension은 오른쪽에서 왼쪽으로 읽으시면 됩니다 y -> x -> (x,y):sp[y][x]