Python Forum
Python help with module function return dictionary
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python help with module function return dictionary
#1
I dont know what is wrong with my script, it only returns the last line from a file with some E coli data. 
It should return a dictionary where the keys are the names of the proteins and sequences are the values. 
def read_fasta(str):
    file =  open(str).read()
    holder = []
    table_dict = {}
    for line in file.split('>'):
        #table_dict[line.split()[0]] = line.splitlines()[1:]
        table_dict["Name"] = (line.splitlines()[:1])
        table_dict["Value"] = (line.splitlines()[1:])
    print table_dict
In another Python file I import this function and test whether it works or not
import module

module.read_fasta("Ecoli.prot.fasta")
Reply
#2
what is the file structure?
sample data?
Reply
#3
On each iteration of your loop the dictionary over writes the same two keys. Would it be preferable to use a list instead or on each loop the key names will need changing to something unique to the dictionary each time.

If you want the two keys values to be a list, first asign each of them as a list outside of the loop then inside the loop append to the list of each key.
Reply
#4
(Oct-15-2016, 12:54 PM)Larz60+ Wrote: what is the file structure?
sample data?

The data contains amino acid sequences for all known proteins in the E. coli organism. So something like this 

>YBGC_ECOLI

and then some lines containing the sequence of amino acids:
MNTTLFRWPVRVYYEDTDAGGVVYHASYVAFYERARTEMLRHHH
FSQQALMAERVAFVVRKMTVEYYAPARLDDMLEIQTEITSMRGTSL
VFTQRIVNAENTLLNEAEVLVVCVDPLKMKPRALPKSIVAEFKQ
Reply
#5
Hello!

Instead of splitting and cutting I'd check if the row starts with '>', strip('>') the row, all that using it as the dict name, and value it with the data with a list comprehension.
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#6
(Oct-15-2016, 12:58 PM)Yoriz Wrote: On each iteration of your loop the dictionary over writes the same two keys. Would it be preferable to use a list instead or on each loop the key names will need changing to something unique to the dictionary each time.

If you want the two keys values to be a list, first asign each of them as a list outside of the loop then inside the loop append to the list of each key.

I've tried but it gives me an error or again only the last line. I'm supposed to create a function that  reads the file then create and return a dictionary. 
This is my output: 
{'Name': ['ZIPA_ECOLI'], 'Value': ['MMQDLRLILIIVGAIAIIALLVHGFWTSRKERSSMFRDRPLKRMKSKRDDDSYDEDVEDDEGVGEVRVHR', 'VNHAPANAQEHEAARPSPQHQYQPPYASAQPRQPVQQPPEAQVPPQ..... ']}
Reply
#7
What is the error you are getting (full text please), and what are the last few lines of the file?
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#8
(Oct-15-2016, 05:34 PM)ichabod801 Wrote: What is the error you are getting (full text please), and what are the last few lines of the file?

The last few lines of the file is : 


Output:
>ZIPA_ECOLI MMQDLRLILIIVGAIAIIALLVHGFWTSRKERSSMFRDRPLKRMKSKRDDDSYDEDVEDDEGVGEVRVHR VNHAPANAQEHEAARPSPQHQYQPPYASAQPRQPVQQPPEAQVPPQHAPHPAQPVQQPAYQPQPEQPLQQ PVSPQVAPAPQPVHSAPQPAQQAFQPAEPVAAPQPEPVAEPAPVMDKPKRKEAVIIMNVAAHHGSELNGE ALLNSIQQAGFIFGDMNIYHRHLSPDGSGPALFSLANMVKPGTFDPEMKDFTTPGVTIFMQVPSYGDELQ NFKLMLQSAQHIADEVGGVVLDDQRRMMTPQKLREYQDIIREVKDANA
The error that I get sometimes is : 

Error:
", line 8, in read_fasta     table_dict[list] = line.splitlines() TypeError: unhashable type: 'list'


User has been warned for this post. Reason: informing of tags
Reply
#9
Does this work? It's not I've proposed. It's step by step. If the file doesn't contain something else...

def get_data(f):
    data = f.read().split()
    ecoli = dict()
    e_name = None

    for row in data:
        if row.startswith(">"):
            e_name = row.strip(">")
            ecoli[e_name] = ""
        else:
            ecoli[e_name] = "{}{}".format(ecoli[e_name], row)

    return ecoli
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#10
Hello again,

I would like to take a closer look at how this data is exactly laid out.
Is this from the ncbi blast database? and if so, which file.

I would rather be working with an actual file.

Larz60+
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  nested function return MHGhonaim 2 619 Oct-02-2023, 09:21 AM
Last Post: deanhystad
  return next item each time a function is executed User3000 19 2,299 Aug-06-2023, 02:29 PM
Last Post: deanhystad
  function return boolean based on GPIO pin reading caslor 2 1,190 Feb-04-2023, 12:30 PM
Last Post: caslor
  passing dictionary to the function mark588 2 981 Dec-19-2022, 07:28 PM
Last Post: deanhystad
  return vs. print in nested function example Mark17 4 1,756 Jan-04-2022, 06:02 PM
Last Post: jefsummers
  How to invoke a function with return statement in list comprehension? maiya 4 2,858 Jul-17-2021, 04:30 PM
Last Post: maiya
  Function - Return multiple values tester_V 10 4,466 Jun-02-2021, 05:34 AM
Last Post: tester_V
  Get return value from a threaded function Reverend_Jim 3 17,141 Mar-12-2021, 03:44 AM
Last Post: Reverend_Jim
  Writing a lambda function that sorts dictionary GJG 1 2,025 Mar-09-2021, 06:44 PM
Last Post: buran
  Using Dictionary to Test Evenness of Distribution Generated by Randint Function new_coder_231013 6 3,297 Feb-23-2021, 01:29 PM
Last Post: new_coder_231013

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020