2016-09-22 4 views
1

목록의 목록 (모든 관련 하위 목록에있는 값)을 사전의 VALUE로 바꾸려고하는데 제대로 작동하지 않습니다. 다음목록 목록의 특정 색인 값을 해당 사전 값으로 바꿉니다.

함유량/사전의 상세는 다음

dictionary = dict(zip(gtincodes, currentstockvalues)) 

사전은 GTIN 코드와 currentstock 값의 쌍을 포함한다. 그래서, 12121212 (GTIN) 값 (currentstockvalue)에 해당하는 값 (currentstockvalue) 1, 및 12,345,670 지금 목록을 파일에서 읽은 NEWDETAILS를 볼 필요가 0

에 해당. 목록은 본질적으로 목록의 목록입니다. newdetails (목록)이 인쇄되면 출력은 다음과 같습니다

[['12345670', 'Iphone 9.0', '500', '5', '3', '5'], ['12121212', 'Samsung Laptop', '900', '5', '3', '5']] 

는 무엇을 수행해야합니다 :

내가 업데이트하고 목록의 값을 대체하기 위해 사전을 사용하고 싶습니다 (모든 관련 목록의 하위 목록). 따라서 사전의 각 GTIN (키)에 대해 각 하위 목록 (해당 GTIN)의 세 번째 색인은 사전의 VALUE (현재 재고 값)로 업데이트해야합니다.

위의 예에서 하위 목록 1 (현재 5 개)의 색인 [3]은 말 2 ... (또는 그 GTIN에 대한 사전의 값이 무엇이든)로 업데이트해야합니다. 두 번째 하위 목록에서도 동일한 작업이 필요합니다.

내가 지금까지 가지고있는 코드는 다음과 같습니다

for sub_list in newdetails: 
     sub_list[3] = dictionary.get(sub_list[3], sub_list[3]) 
     print(sub_list) 

위는 단순히 두 개의 별도 하위 목록을 생성하고이를 인쇄 할 나타납니다. 대체품을 만들고 있지 않습니다.

['12345670', 'Iphone 9.0', '500', '5', '3', '5'] 
['12121212', 'Samsung Laptop', '900', '5', '3', '5'] 

내 질문은 : 나는 4 요소를 각 하위 목록의 (인덱스 [0] 일치), 및 REPLACE 사전을 찾으려면 위의 코드를 수정하려면 어떻게

(인덱스 [03])를 해당 GTIN에 대한 사전의 VALUE와 비교합니까?

미리 감사드립니다.

for sub_list in newdetails: 
     sub_list[3] = dictionary.get(gtin), sub_list[3] 
     print(sub_list) 

그것은 (튜플의) 교체와 함께 제공보다는 개별 값 : 알렉스 P의 제안을 바탕으로

UPDATE

는 (감사) 나는 다음과 같은 편집했다 -로는 다음과 같습니다

['12345670', 'Iphone 9.0', '500', (1, '5'), '3', '5'] 
['12121212', 'Samsung Laptop', '900', (1, '5'), '3', '5'] 

사전의 내용 :

,536,
12121212 3 
0 0 
12345670 1 

12121212는 gtin이고 '3'은 현재 재고입니다. 사전을 검색하고 싶습니다. 해당 GTIN이 newdetails 목록에서 발견되면 newdetails 목록의 세 번째 색인 (네 번째 요소)을 사전의 해당 값으로 대체하려고합니다. 따라서 - 12121212의 경우 5가 3으로 대체됩니다.

for sub_list in newdetails: 
     sub_list[3] = dictionary.get(int(sub_list[0]), sub_list[3]) 
     print(sub_list) 

출력이 ....하지만 - 감사합니다 - 그리고 12345670에 대해, 5 내가이 시도

모세 K에 의해 제안에 따라 1

UPDATE로 대체합니다 여전히 단순한 두 개의 (변경되지 않은) 하위 목록입니다.

['12345670', 'Iphone 9.0', '500', '5', '3', '5'] 
['12121212', 'Samsung Laptop', '900', '5', '3', '5'] 

업데이트 # 2 - 둘 다 int로 변환됩니다.

대신 (I 원하는)는 그
['12345670', 'Iphone 9.0', '500', 5, '3', '5'] 
['12121212', 'Samsung Laptop', '900', 5, '3', '5'] 

: [ '12345670', '아이폰 9.0', '500'2 '

for sub_list in newdetails: 
     print("sublist3") 
     print(sub_list[3]) 
     sub_list[3] = dictionary.get(int(sub_list[0]), (int(sub_list[3]))) 
     print(sub_list) 

스틸의 출력 제조 3 ', 5' '] ['12121212 ','삼성 노트북 ','900 ' 1', 3 ', 5' ']

+0

나는, 그 권리를 이해한다면 사전에서''GTIN ''키를 원하지만,'sub_list [3] '키는'5'입니다. 그 키는 아마도 dict에 존재하지 않을 것이므로,'.get'은 기본값을 반환합니다, 다시 5,'sub_list [3]'을 5로 대체하십시오.'dictionary.get ('GTIN')' . – alexpeits

+0

Hello Alex - 고마워요! 당신이 의미하는 것을 대답으로 올릴 수 있습니까? 나는 dictionary.get (gtin)과 dictionary.get ('gtin')을 시도했지만 값이 아닌 튜플로 바꿉니다! –

+0

게시물을 편집하고 샘플 사전을 포함 할 수 있습니까? – alexpeits

답변

1

GTIN 코드 인덱스 0에서각각의 하위 목록이 사전 키되어야한다 :

for sub_list in newdetails: 
     sub_list[3] = dictionary.get(sub_list[0], sub_list[3]) 
#           ^

사전에있는 코드는 정수와 문자열이 아니라 다음 int에 캐스팅해야합니다 경우 :

for sub_list in newdetails: 
     sub_list[3] = dictionary.get(int(sub_list[0]), sub_list[3]) 
#           ^
+0

모세에게 감사드립니다. 나는 당신의 제안을 시도했으나 결과물은 여전히 ​​두 개 (변경되지 않은)의 하위 목록으로 나뉘어져 있지만, 대체물은 만들어지지 않았다. –

+0

'int'로 변환하려고 했습니까? –

+0

예 ... 위의 코드를 업데이트하십시오. 여전히 두 개의 변경되지 않은 하위 목록을 생성합니다. 두 개의 int 변환으로 게시 게시 –

관련 문제