使用相应的字典值

时间:2016-09-22 07:48:32

标签: python dictionary sublist

我正在尝试使用字典中的VALUE替换列表列表(在所有相关子列表中)中的值,并且无法使其正常工作。

字典的内容/细节如下:

dictionary = dict(zip(gtincodes, currentstockvalues))

字典包含成对的GTIN代码和当前值。因此,12121212(GTIN)对应于值(currentstockvalue)1,而12345670对应于值(currentstockvalue)0。

我现在需要查找已从文件中读入的列表 NEWDETAILS 。该列表基本上是列表列表。当打印newdetails(列表)时,输出为:

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

需要做什么:

我想使用字典来更新和替换列表中的值(以及列表中的所有相关子列表)。因此,对于字典中的每个GTIN(键),每个子列表中的第三个索引(对应的GTIN)需要使用字典中的VALUE(currentstockvalue)进行更新。

在上面的例子中,对于子列表的子列表1-index [03](whcih当前为5)需要用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']

我的问题是:

如何将上述代码修改为LOOK UP THE DICTIONARY(以匹配每个子列表的索引[0]),并将每个子列表的第4个元素(索引[03])替换为字典中的VALUE相应的GTIN?

提前致谢。

更新

根据Alex P的建议(谢谢),我进行了以下编辑:

 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'是当前的股票。 我想查找字典,如果在newdetails列表中找到相应的GTIN,我想用newdetails列表中的第三个索引(第四个元素)替换字典中的相应值。所以 - 对于12121212,5将被替换为3.而对于12345670,5将被替换为1.

根据Moses K的建议更新

我试过这个 - 谢谢 - 但是......

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

输出仍然只是两个(未更改的)子列表。

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

更新#2 - 都转换为int。

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)

仍然产生以下输出:

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

而不是(我想要的)是: [' 12345670',' Iphone 9.0',' 500', 2 ,' 3',&# 39; 5'] [' 12121212',' Samsung Laptop',' 900', 1 ,' 3',&#39 ; 5']

1 个答案:

答案 0 :(得分: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])
#                                           ^