Python通过元组列表搜索并根据具有多个条件的索引返回

时间:2018-11-06 19:58:46

标签: python list tuples list-comprehension

我有一个元组列表,它是一个参考表:

 classes = [('400002', 'Class1'), ('400009', 'Class2'), ('400209', 'Class3')]

我还有记录的元组列表:

records = [('Record 1','400002','Memo1'),('Record 2','400003','Memo2'), 
 ('Record 3','400009','Memo3'),('Record 4','L-REF-96-1','Memo4'),('Record 
 5','400002','Memo5')]

为了导入,我必须分配一个类并对其进行编码:

encoding = 'utf-8'
ref = []
nom = []
memo = []
classr = []
for i in records:
   ref.append(i[0].encode(encoding))
   nom.append(i[1].encode(encoding))
   memo.append(i[2].encode(encoding))

现在我需要根据索引2(如果存在)来分配一个类,否则,如果str以L-REF开头,则为其提供一个通用类,否则为其提供另一个通用类

我正在做这样的事情,但是没有成功,它始终默认为if语句的“ Else”部分:

    for c in classes:
       if i[1] == c[0]:
         newclass = c[1]
       elif i[1][5:] == "L-REF":
         newclass = 'general class1'
       else:
         newclass = 'general class2'
    classr.append(newclass.encode(encoding))
 newimportlist = list(zip(ref,nom,memo,classr))

预期输出:

[(b'Record 1',b'400002',b'Memo1',b'Class1'),(b'Record 
2',b'400003',b'Memo2',b'general class2'), (b'Record 
3',b'400009',b'Memo3',b'Class2'),(b'Record 4',b'L-REF-96- 
1',b'Memo4',b'general class 1'),(b'Record 
5',b'400002',b'Memo5',b'Class1')]

1 个答案:

答案 0 :(得分:1)

首先,可以通过转置列表tabulizer::extract_tables(FilePath, pages = 1, guess = FALSE , area = list(c(265, 33, 460,400)) , columns = list(c(300)))) 来更轻松地构造refnommemo

records

现在从>>> ref, nom, memo = map(list, zip(*records)) >>> ref >>> ['Record 1', 'Record 1', 'Record 3', 'Record 4', 'Record 5'] >>> nom >>> ['400002', '400003', '400009', 'L-REF-96-1', '400002'] >>> memo >>> ['Memo1', 'Memo1', 'Memo3', 'Memo4', 'Memo5'] 构建字典。

classes

>>> classes = [('400002', 'Class1'), ('400009', 'Class2'), ('400209', 'Class3')] >>> classes_dict = dict(classes) >>> classes_dict >>> {'400002': 'Class1', '400009': 'Class2', '400209': 'Class3'} (我假设这是您的预期输出的名称)现在可以按以下方式构建:

classr