在列表的第一列中查找元素,但在第二列中返回元素

时间:2019-06-30 18:28:02

标签: python

我真的是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中获取第二列的值

我应该使用什么功能?

2 个答案:

答案 0 :(得分:0)

您在此处使用了错误的数据结构。您需要一个字典,而不是列表。

直接创建一个字典:

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不包含子列表,但包含元组。如果您知道其中将包含的元素数量,请不要使用列表。改用元组。

答案 1 :(得分:-1)

*假设SELECT中的所有elemX是唯一的,并且在list1中仅出现一次。

如果将list2更改为字典,则很容易获得值。

list2

然后遍历list2_dict = {item[0]: item[1] for item in list2} 并获取值

list1