gpt4 book ai didi

python - 如何使用python从文件创建多级字典

转载 作者:行者123 更新时间:2023-11-28 17:21:40 25 4
gpt4 key购买 nike

我正在尝试从文件创建多级字典。

文件格式如下:file.txt

name1   gene1   cds     1       2       +
name1 gene1 cds 2 5 -
name1 gene1 exon 1 2 +
name1 gene1 exon 2 5 -
name1 gene2 cds 4 6 +
name1 gene2 cds 6 9 +
name1 gene2 exon 1 10 +
name1 gene2 exon 2 5 -
name2 gene1 gene 1000 1333 +

字典数据结构如下。

dct =  { 'name1' : {'gene1':{'cds':[[1, 2, '+'],[2, 5, '-']], "exon": [[1, 2, '+'],[2, 5, '-']] } , 'gene2':{'cds':[[4, 6, '+'],[6, 9, '+']], "exon": [[1, 10, '+'],[2, 5, '-']] } } }

或者只是为了理解:

name1
gene1
exon
1, 2, "+",
2, 5, "-"
CDS
1, 2, "+"
2, 5, "-"
gene2
CDS
4, 6 "+"
6, 9, "+"
exon
1, 10, "+",
2, 5, "-"
name2
...
...

我的尝试:

import re

def read_dct(name):
filename = name
dct = {}
ReadFH = open(filename, 'r')
for i, line in enumerate(ReadFH):
line = line.rstrip()
tmp=re.split(r'\t', line)
if(len(tmp) > 5):
dct[tmp[0]][tmp[1]][tmp2]=[tmp[3], tmp[4], tmp[5]]

ReadFH.close
return dct

filename = "file.txt"
dct = read_dct(filename)
print dct

我在创建字典时遇到问题:

dct[tmp[0]][tmp[1]][tmp2]=[tmp[3], tmp[4], tmp[5]]

需要这方面的帮助

最佳答案

您可以使用嵌套 defaultdict第三层的值是列表:

from collections import defaultdict

res = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))

with open('test.txt') as f:
for line in f:
k1, k2, k3, *val = line.split()
res[k1][k2][k3].append(val)

for k, v in res.items():
for k2, v2 in v.items():
for k3, v3 in v2.items():
print('{}, {}, {}: {}'.format(k, k2, k3, v3))

输出:

name2, gene1, gene: [['1000', '1333', '+']]
name1, gene2, cds: [['4', '6', '+'], ['6', '9', '+']]
name1, gene2, exon: [['1', '10', '+'], ['2', '5', '-']
name1, gene1, cds: [['1', '2', '+'], ['2', '5', '-']]
name1, gene1, exon: [['1', '2', '+'], ['2', '5', '-']]

extended iterable unpacking 以来,以上仅适用于 Python 3 Python 2 不支持。在 Python 2 上,您可以存储 split 返回的 list 并使用 slice 获取键和值:

with open('test.txt') as f:
for line in f:
l = line.split()
k1, k2, k3 = l[:3]
res[k1][k2][k3].append(l[3:])

关于python - 如何使用python从文件创建多级字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282344/

25 4 0
文章推荐: python thrift union类型不能序列化?
文章推荐: html - 需要制作3列3行的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com