1

我有一个字典,可以搜索 ID 名称并在其后读取标记。但我想知道是否有办法读取并打印出包含该 ID 名称的整行。

这是我到目前为止所拥有的:

lookup = defaultdict(list)
wholelookup =defaultdict(list)
mydata = open('summaryfile.txt')

for line in csv.reader(mydata, delimiter='\t'):
    code = re.match('[a-z](\d+)[a-z]', line[-1], re.I)
    if code: 
        lookup[line[-2]].append(code.group(1))
        wholelookup[line[-2]].append(code.group(0))
4

2 回答 2

0

如果你有足够的内存,最简单的方法是简单地将这些行保存在另一个 defaultdict 中:

wholeline = defaultdict(list)
...
idname = line[-2]
wholeline[idname].append(line)
于 2012-07-23T22:38:40.930 回答
0

您的代码调用csv.reader()将返回整行的解析版本。在我的测试中,这会返回一个值列表。如果此值列表适用于“整行”,那么您可以保存它。

您有一行在其中附加了一些名为wholelookup. 我认为您只想保存line在那里而不是code.group(0). code.group(0)返回正则表达式匹配的所有内容,这与line[-1].

所以也许把这一行放在你的代码中:

wholelookup[line[-2]].append(line)

或者,也许您需要将这些值连接在一起line以创建一个字符串:

s = ' '.join(line)
wholelookup[line[-2]].append(s)

如果您想要整行,而不是解析后的版本,请执行以下操作:

lookup = defaultdict(list)
wholelookup = defaultdict(list)
pat = re.compile('[a-z](\d+)[a-z]', re.I)

with open('summaryfile.txt') as mydata:
    for s_line in mydata:
        values = s_line.split('\t')
        code = re.match(pat, values[-1])
        if code: 
            lookup[values[-2]].append(code.group(1))
            wholelookup[values[-2]].append(s_line)

此示例预编译模式以获得轻微的速度优势。

于 2012-07-23T22:49:58.453 回答