2016-09-22 10 views
1

リストのリスト(関連するすべてのサブリスト)の値を辞書のVALUEに置き換えようとしています。次のようにリストのリスト内の特定のインデックス値を対応するディクショナリ値に置き換えます。

辞書の内容/詳細は次のとおり

​​

辞書はGTINコードとcurrentstock値のペアを含みます。だから、12121212(GTIN)値(currentstockvalue)に対応する値(currentstockvalue)1、および12345670私は今リストにファイルから読み込まれていNEWDETAILSをルックアップする必要がある0

に対応します。リストは基本的にリストのリストです。 newdetails(リスト)が印刷されている場合、出力は次のようになります。

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

は何行われる必要があります:

私が更新し、リスト内の値を置き換えるために辞書を使用したい(および関連するすべてのリスト内のサブリスト)。したがって、辞書内の各GTIN(キー)に対して、(対応するGTINのための)各サブリストの3番目のインデックスは、辞書内のVALUE(currentstockvalue)で更新する必要があります。

上記の例では、サブリスト1の索引[03](現在は5)が2と更新される必要があります(またはそのGTINのディクショナリの値が何であれ)。 2番目のサブリストでも同じことが必要です。

私がこれまで持っているコードは次のとおりです。

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

上記単純に2つの別々のサブリストを生成し、それらを印刷するように見えます。それは交換をしていません。

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

私の質問です:私は4番目の要素を各サブリストの(インデックス[0]と一致するように)、およびREPLACE DICTIONARYをルックアップするために上記のコードを修正するにはどうすればよい

(インデックス[03] )を対応するGTINの辞書のVALUEに置き換えますか?

ありがとうございます。アレックスPの提案に基づいて

UPDATE

(ありがとう)私は、次の編集作られた:それは(タプルの)交換だけでなく、個々の値を思い付く

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

を - としては、以下:

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

辞書の内容:

12121212 3 
0 0 
12345670 1 

12121212は、gtinであり、 '3'は、現在のストックである。 辞書を検索したいのですが、対応するGTINがnewdetailsリストにある場合は、newdetailsリストの3番目のインデックス(4番目の要素)を辞書の対応する値に置き換えます。したがって、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と交換します単に2つの(変更されていない)サブリストだけです。

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

アップデート#2 - どちらもintに変換されました。

代わりに(私が欲しいもの)であることの
['12345670', 'Iphone 9.0', '500', 5, '3', '5'] 
['12121212', 'Samsung Laptop', '900', 5, '3', '5'] 

: [ '12345670'、 'iPhoneの9.0'、 '500'、、「

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'、、 '3'、 '5']

+0

私はそれが右理解していれば、辞書から '' GTIN ''キーが必要ですが、 '' sub_list [3] 'キーは' 5'です。そのキーはおそらく辞書には存在しないので、 '.get'はデフォルトの値を返すので、' 5 'を 'sub_list [3]'に置き換えます。 'dictionary.get(' GTIN ')' 。 – alexpeits

+0

こんにちはアレックス - ありがとう!あなたは、あなたが意味するものを答えを投稿することができますか?私はdictionary.get(gtin)とdictionary.get( 'gtin')を試しましたが、値ではなくタプルで置き換えました。 –

+0

投稿を編集してサンプル辞書を含めることはできますか? – alexpeits

答えて

1

インデックス0であなたのGTINコード各サブリストのあなたの辞書のキーでなければなりません:

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

モーゼにありがとうございました。私はあなたの提案を試みましたが、出力はまだ別々に印刷する2つの(変更されていない)サブリストですが、置換は行われていません。 –

+0

'int'に変換しようとしましたか? –

+0

はい...上記のコードは更新しています。まだ2つの変更されていないサブリストが生成されます。 2つのint型変換で投稿を投稿する –

関連する問題