从列表中的多个项目生成词典

2024-10-04 11:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图找到一种方法,使用Python脚本将列表中的多个项组合成字典。有问题的列表如下所示,仅举几个例子:

['331416', 'Macromedaeus', 'distinguendus', '|', '|', 'scientific', 'name','|']
['331417', 'Physalopteroidea', '|', '|', 'scientific', 'name', '|']
['331418', 'Dracunculus', 'insignis', '|', '|', 'scientific', 'name', '|']
['331419', 'Bejaria', 'sprucei', '|', '|', 'scientific', 'name', '|']
['331420', 'Paecilomyces', 'sp.', 'JCM', '12545', '|', '|', 'scientific', 'name', '|']

这就是我找麻烦的地方,因为我不知道该怎么做。第一项是一个ID,第二项是一个有机体属名称,有时有一个物种名称作为第三项,有时没有,就像第二个列表的情况一样。我需要创建一个字典,使用ID号作为键,使用有机体属和物种名称(如果给定)作为值。你知道吗

我该怎么做呢?我目前正在使用Python。2.7.8. 你知道吗


Tags: 方法name脚本名称id列表字典物种
3条回答

给定其中一个列表,请执行以下操作:

mydict = {}
mylist = ['331416', 'Macromedaeus', 'distinguendus', '|', '|', 'scientific', 'name','|']
mydict[mylist[0]] = mylist[1:]

print mydict

它将ID作为键,并使列表的其余部分成为值。你知道吗

然后根据这些列表的存储位置,可以循环浏览并将它们全部添加到字典中。你知道吗

input = [
['331416', 'Macromedaeus', 'distinguendus', '|', '|', 'scientific', 'name','|'],
['331417', 'Physalopteroidea', '|', '|', 'scientific', 'name', '|'],
['331418', 'Dracunculus', 'insignis', '|', '|', 'scientific', 'name', '|'],
['331419', 'Bejaria', 'sprucei', '|', '|', 'scientific', 'name', '|'],
['331420', 'Paecilomyces', 'sp.', 'JCM', '12545', '|', '|', 'scientific', 'name', '|']
]

taxonomy = {}
for r in input:
  taxonomy[r[0]] = {}
  taxonomy[r[0]]['genus'] = r[1]
  if r[2] != '|':
    taxonomy[r[0]]['specie'] = " ".join(r[2:r.index("|")])

taxonomy中获取以下输出

{
'331418': {'genus': 'Dracunculus', 'specie': 'insignis'}, 
'331419': {'genus': 'Bejaria', 'specie': 'sprucei'}, 
'331420': {'genus': 'Paecilomyces', 'specie': 'sp. JCM 12545'}, 
'331416': {'genus': 'Macromedaeus', 'specie': 'distinguendus'}, 
'331417': {'genus': 'Physalopteroidea'}
}

如果您希望字典的键是ID,值是简单列表(而不是字典),请使用defaultdict,它允许您拥有列表值。你知道吗

import re # import regular expressions
from collections import defaultdict # use default dictionary


# your lists
combinedlist = [
['331416', 'Macromedaeus', 'distinguendus', '|', '|', 'scientific', 'name','|'],
['331417', 'Physalopteroidea', '|', '|', 'scientific', 'name', '|'],
['331418', 'Dracunculus', 'insignis', '|', '|', 'scientific', 'name', '|'],
['331419', 'Bejaria', 'sprucei', '|', '|', 'scientific', 'name', '|'],
['331420', 'Paecilomyces', 'sp.', 'JCM', '12545', '|', '|', 'scientific', 'name', '|']
]

# make a regular expression pattern for an id number that is exactly 6 digits
# this is flexible  if you wanted an id number between 4 and 6 digits, use \d{4,6}
id_num = re.compile("\d{6}")

# your default dictionary which has lists as values
d = defaultdict(list)

# iterate through your combined list
for list in combinedlist:
    n = len(list)
    new_entry = []
    # for all the entries of each list
    for i in range(1, n):
        new_entry.append(list[i])
    d[list[0]] = new_entry


# print 
for key in d.keys():
    print 'key: ',key, '\n    value:',d[key]

这是输出

key:  331418 
    value: ['Dracunculus', 'insignis', '|', '|', 'scientific', 'name', '|']
key:  331419 
    value: ['Bejaria', 'sprucei', '|', '|', 'scientific', 'name', '|']
key:  331420 
    value: ['Paecilomyces', 'sp.', 'JCM', '12545', '|', '|', 'scientific', 'name', '|']
key:  331416 
    value: ['Macromedaeus', 'distinguendus', '|', '|', 'scientific', 'name', '|']
key:  331417 
    value: ['Physalopteroidea', '|', '|', 'scientific', 'name', '|']

相关问题 更多 >