简体   繁体   中英

How to write to file a list of dictionaries in Python

I have the following tuple of dictionaries:

myListOfDict = {
'READ_NAME': 'NB501050:52:HHMJJBGXY:4:13609:11402:8330', 'CLASS_ID': 3, 'SEQ_ID': 0, 'READ_LEN': 136, 'QVALUES': 'KEOLFC.I?EA;CHEJ?/0CGDBI1GF4D+>-CEB8/J/EFF=HK/0GGGHCFG;GFBH0JG8GG..DGH/BKD?,BHFCFHKF=BH-HFG3BHHGGHFHIBGHFHKDIIJCFGHABGIEHCFFHFHEHEEGQOOO', 'SEQUENCE': 'CACAGGTCTATCACCCTATTAACCCCTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATT', 'MAPPING_POS': 3, 'DELTA': 0, 'ECIGAR_STRING': '24=C111=', 'ECIGAR_LEN': 8, 'REVERSE_COMP': 1, 'MAPPING_SCORE': 70.0
}, 
{
'READ_NAME': 'NB501050:47:HHMJVBGXY:2:11311:23488:9633', 'CLASS_ID': 3, 'SEQ_ID': 0, 'READ_LEN': 136, 'QVALUES': 'K@KJ<E12I1H0I@BGGHFIJFHFIKFCIKFGGGGH=EGG@FBHFJGGGGG0HGHDEKDBIBHFCFIKFGFHBHFHDBIJGGHFEIBGHFIKDIIJCFGHFBIKFHCFF5GHFIGDGGEFEHJFI6JEJEEHRKMN', 'SEQUENCE': 'CTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTAT', 'MAPPING_POS': 18, 'DELTA': 0, 'ECIGAR_STRING': '131=C4=', 'ECIGAR_LEN': 7, 'REVERSE_COMP': 1, 'MAPPING_SCORE': 70.0
}, 
{...}

For each element of the tuple (that is a dictionary), I need to print to a file ONLY the value corresponding to each key. Below what I'm looking for:

NB501050:52:HHMJJBGXY:4:13609:11402:8330 3 0 136 KEOLFC.I?EA;CHEJ?/0CGDBI1GF4D+>-CEB8/J/EFF=HK/0GGGHCFG;GFBH0JG8GG..DGH/BKD?,BHFCFHKF=BH HFG3BHHGGHFHIBGHFHKDIIJCFGHABGIEHCFFHFHEHEEGQOOO ..
NB501050:47:HHMJVBGXY:2:11311:23488:9633 3 0 136 K@KJ<E12I1H0I@BGGHFIJFHFIKFCIKFGGGGH=EGG@FBHFJGGGGG0HGHDEKDBIBHFCFIKFGFHBHFHDBIJGGHFEIBGHFIKDIIJCFGHFBIKFHCFF5GHFIGDGGEFEHJFI6JEJEEHRKMN ...

I implemented the following code:

with open("filename_t", "w") as f:
 for val in myListOfDict:
    for val1 in val.items():
        for val2 in val1:
           f.write(str(val2) + "  ")
    f.write("\n")

but I don't get what I want..

READ_NAME  NB501050:52:HHMJJBGXY:4:13609:11402:8330  CLASS_ID  3  SEQ_ID  0 READ_LEN  136  QVALUES  KEOLFC.I?EA;CHEJ?/0CGDBI1GF4D+>-CEB8/J/EFF=HK/0GGGHCFG;GFBH0JG8GG..DGH/BKD?,BHFCFHKF=BH-HFG3BHHGGHFHIBGHFHKDIIJCFGHABGIEHCFFHFHEHEEGQOOO  SEQUENCE  CACAGGTCTATCACCCTATTAACCCCTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATT  MAPPING_POS  3  DELTA  0  ECIGAR_STRING  24=C111=  ECIGAR_LEN  8  REVERSE_COMP  1  MAPPING_SCORE  70.0  
READ_NAME  NB501050:47:HHMJVBGXY:2:11311:23488:9633  CLASS_ID  3  SEQ_ID  0 READ_LEN  136  QVALUES  K@KJ<E12I1H0I@BGGHFIJFHFIKFCIKFGGGGH=EGG@FBHFJGGGGG0HGHDEKDBIBHFCFIKFGFHBHFHDBIJGGHFEIBGHFIKDIIJCFGHFBIKFHCFF5GHFIGDGGEFEHJFI6JEJEEHRKMN  SEQUENCE  CTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTAT  MAPPING_POS  18  DELTA  0  ECIGAR_STRING  131=C4=  ECIGAR_LEN  7  REVERSE_COMP  1  MAPPING_SCORE  70.0 

How can I avoid printing the keys?

You are printing both keys and values because you are using dict.items() function which returns key-value tuples. Just change your code to:

with open("filename_t", "w") as f:
 for val in myListOfDict:
    for val1 in val.values():
        f.write(str(val1) + "  ")
    f.write("\n")

Note that dictionary doesn't guarantee you the keys/values/items order.

You can use the csv module.

Ex:

import csv

myListOfDict = [{
'READ_NAME': 'NB501050:52:HHMJJBGXY:4:13609:11402:8330', 'CLASS_ID': 3, 'SEQ_ID': 0, 'FLAGS': [0, 0, 0], 'READ_LEN': 136, 'QVALUES': 'KEOLFC.I?EA;CHEJ?/0CGDBI1GF4D+>-CEB8/J/EFF=HK/0GGGHCFG;GFBH0JG8GG..DGH/BKD?,BHFCFHKF=BH-HFG3BHHGGHFHIBGHFHKDIIJCFGHABGIEHCFFHFHEHEEGQOOO', 'SEQUENCE': 'CACAGGTCTATCACCCTATTAACCCCTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATT', 'MAPPING_POS': 3, 'DELTA': 0, 'ECIGAR_STRING': '24=C111=', 'ECIGAR_LEN': 8, 'REVERSE_COMP': 1, 'MAPPING_SCORE': 70.0
}]

with open("filename_t", "w") as f:
    writer = csv.DictWriter(f, delimiter=" ", fieldnames=['REVERSE_COMP', 'SEQUENCE', 'CLASS_ID', 'SEQ_ID', 'READ_LEN', 'ECIGAR_LEN', 'FLAGS', 'MAPPING_SCORE', 'ECIGAR_STRING', 'MAPPING_POS', 'QVALUES', 'READ_NAME', 'DELTA'])
    for val in myListOfDict:
        writer.writerow(val)
with open("filename_t", "w") as f:
    for val in myListOfDict:
        for val1 in val.values():
            if isinstance(val1, list):
                v = ' '.join(map(lambda x: str(x), val1))
            else:
                v = str(val1)
            f.write(v + "  ")
        f.write("\n")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM