[英]Create a python dictionary from a tab delimited file that is not 1:1
我想从制表符分隔的文件(无标题)创建两个python3字典。 该文件有2列,我想将其命名为group_id和gene_id。 一个组可以具有多个基因,一个基因可以属于多个组。 我将通过一个简单的例子演示我想要的东西。
group_id gene_id
A a
A b
A c
A d
B a
B c
B e
我想要2本字典:
dict1 = {'A':(a,b,c,d),'B':(a,c,e)}
和
dict2 = {'a':(A,B), 'b':(A), 'c':(A,B), 'd':(A), 'e':(B)}
我想将值存储在元组中以提高速度,因为我的文件为2.5 GB,最终我将得到大字典,以后必须使用它。
我知道有很多这样的问题,但是我无法从中找到答案,因为它们处理的是具有key:value对的文件。
谢谢!
我认为代码在这里可以说明问题,但是基本上,由于您使用的是字符串,因此可以只使用两个单独的字典,然后在每一行中进行解析。 如果您有一个新值,则必须创建一个新条目,并使用if语句进行操作。 有一点,您应该使用列表,因为元组是不可变的,创建后就不能更改:
data = """group_id gene_id
A a
A b
A c
A d
B a
B c
B e"""
lines = data.splitlines()
group_dict = {}
gene_dict = {}
for line in lines[1:]:
group, gene = line.split()
if group not in group_dict.keys():
group_dict[group] = list()
group_dict[group].append(gene)
if gene not in gene_dict.keys():
gene_dict[gene] = list()
gene_dict[gene].append(group)
from pprint import pprint
pprint(group_dict)
pprint(gene_dict)
印刷品:
{'A': ['a', 'b', 'c', 'd'], 'B': ['a', 'c', 'e']}
{'a': ['A', 'B'], 'b': ['A'], 'c': ['A', 'B'], 'd': ['A'], 'e': ['B']}
collections
模块具有defaultdict
方法,该方法返回一个新的类似于字典的对象。 只需将值附加到每个键,就可以完成工作。
from collections import defaultdict
dict1 = defaultdict(list)
dict2 = defaultdict(list)
with open("C:/path/example.txt") as f:
header = f.next()
for line in f:
if line.strip():
a,b = line.strip().split()
dict1[a].append(b)
dict2[b].append(a)
print dict1
退货
defaultdict(<type 'list'>, {'A': ['a', 'b', 'c', 'd'], 'B': ['a', 'c', 'e']})
和dict2
defaultdict(<type 'list'>, {'a': ['A', 'B'], 'c': ['A', 'B'], 'b': ['A'], 'e': ['B'], 'd': ['A']})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.