簡體   English   中英

從制表符分隔的文件(不是1:1)創建python字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM