首页 > 解决方案 > 在列表的第一列中查找元素,但返回第二列中的元素

问题描述

我对 Python 真的很陌生,我正在尝试执行以下操作

我有两个列表,其中一个就像

清单 1:

['elem11','elem12','elem13'],

['elem21','elem22','elem23'],

['elem31','elem32','elem33']

而另一个

清单2:

['elem11', value1],

['elem12', value2],

['elem13', value3],

['elem21', value4],
...

list2 包含 list1 中的所有元素及其各自的值。

我想生成第三个列表,例如

清单 3:

['result line1 from list1', value1*value2*value3],

['result line2 from list1', value4*value5*value6],

['result line3 from list1', value7*value8*value9],

list1 和 list2 中的元素根本不按顺序排列,因此我必须能够将 list1 中的每个元素与 list2 中的值匹配。

我尝试使用类似的东西


for i in range(3)
   if list1[i][0] in list2
      ...
   if list1[i][1] in list2
      ...
   if list1[i][2] in list2
      ...

但是我已经不知道如何从 list2 中获取第二列的值

我应该使用哪些功能?

标签: python

解决方案


您在那里使用了错误的数据结构。你想要一个字典,而不是一个列表。

直接创建一个字典:

list2_dict = {
   'elem11': value1,
   'elem12': value2,
   'elem13': value3,
   'elem21': value4
}

或者从列表中创建一个,如果你不能改变你从列表开始的事实:

list2 = [
   ['elem11', value1],
   ['elem12', value2],
   ['elem13', value3],
   ['elem21', value4]
]
list2_dict = {key:val for key,val in list2}

然后,您可以遍历 list1 并构造您的 list3:

list3 = []
for i, list1_row in enumerate(list1):
    row_sum = 0
    for list1_el in list1_row:
        row_sum += list2_dict[list1_el]
    list3.append(("result line" + str(i+1) + " from list1", row_sum))
# list3:
[
   ('result line1 from list1', <some number>),
   ('result line2 from list1', <some number>),
   ('result line3 from list1', <some number>)
]

另外,请注意 list3 不包含子列表,而是元组。如果您知道其中的元素数量,请不要使用列表。改用元组。


推荐阅读