编写python两级循环理解

pan*_*mer 1 python list-comprehension dictionary-comprehension

我有一个包含以下行的输入文件:

key \t  value1  \t value2 ..... 
Run Code Online (Sandbox Code Playgroud)

我想把这个文件读入一个字典,其中key是该行的第一个标记,值是值列表.

我认为这样的事情会这样做,但python给我一个错误,名称l没有定义.如何编写具有两个级别的"for"语句的理解?

f = open("input.txt")
datamap = {tokens[0]:tokens[1:] for tokens in l.split("\t") for l in enumerate(f)}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

使用该csv模块并将每行插入字典:

import csv

with open('input.txt') as tsvfile:
    reader = csv.reader(tsvfile, delimiter='\t')
    datamap = {row[0]: row[1:] for row in reader}
Run Code Online (Sandbox Code Playgroud)

这完全回避了这个问题.

可以str.split()结果放入元组以创建"循环变量":

datamap = {row[0]: row[1:] for l in f for row in (l.strip().split("\t"),)}
Run Code Online (Sandbox Code Playgroud)

这里row绑定str.split()了元组的一个结果,有效地创建了一个row = l.strip().split('\t')"赋值".