字典登记号码

时间:2013-05-23 14:59:39

标签: python dictionary

* 编辑,我重申了这个问题,希望它不像以前那样愚蠢!

我想创建一个与种类名称匹配登记号的字典。我格式化了我的文件,看起来像这样:

'AM158981':布鲁氏菌,pinnipedialis,Brucellaceae,
'AM158980':布鲁氏菌,猪链球菌,Brucellaceae,
'AM158982':布鲁氏菌,CETI,Brucellaceae,
'AM158979':布鲁氏菌,流产布鲁氏菌,Brucellaceae,

等......

我想打开此文件,使其成为字典。我写这篇文章试图打开它,并将入藏号码作为字典的关键词:

#! /usr/bin/env python

reader = open("acsn.txt")

result = {}
for row in reader:
    key = row[0]
    if key in result:
        pass
    result[key] = row[1:]
print result

“key = row [0]”行使入藏号的第一个字母成为关键。我意识到使用[0]只是返回字符串的第一个字符,但我不知道如何使它成为第一个'字'(例如AM158981)成为关键字。

谢谢!

2 个答案:

答案 0 :(得分:2)

Python代码:

data = """>D50541 Abiotrophia defectiva Aerococcacea
>AB303221 Acanthopleuribacter pedis Acanthopleuribacteraceae
>AJ812213 Acaricomes phytoseiuli Micrococcaceae"""

dict(row[1:].split(" ", 1) for row in data.split("\n"))

输出:

{'AB303221': 'Acanthopleuribacter pedis Acanthopleuribacteraceae',
 'AJ812213': 'Acaricomes phytoseiuli Micrococcaceae',
 'D50541': 'Abiotrophia defectiva Aerococcacea'}

修改

如果从文件input.txt读取数据,请执行以下操作:

dict(row[1:].split(" ", 1) for row in open("input.txt").read().split("\n") if row)

答案 1 :(得分:0)

这是一些帮助。

首先,最好使用with构造在Python中打开文件,如下所示:

with open('/tmp/src.txt','r') as src:
    for line in src:
        print line.strip()

这应该完整地打印你的文件:

\>D50541 Abiotrophia defectiva   Aerococcacea
\>AB303221 Acanthopleuribacter pedis     Acanthopleuribacteraceae
\>AJ812213 Acaricomes phytoseiuli        Micrococcaceae

现在您只需解析数据的每一行。仅仅基于个人偏好,我会使用正则表达式,但有很多方法可以做到这一点。 Here is an example regex适用于您的数据线。

这是Python中的相同示例正则表达式:

import re

data={}        
with open('/tmp/src.txt','r') as src:
    for line in src:
        m=re.search(r'>([^\s]*)\s(.*)$',line)       
        if m:
            data[m.group(1)]=m.group(2)  

print data 

打印:

{'AB303221': 'Acanthopleuribacter pedis     Acanthopleuribacteraceae', 'AJ812213': 'Acaricomes phytoseiuli        Micrococcaceae', 'D50541': 'Abiotrophia defectiva   Aerococcacea'}