簡體   English   中英

文本文件列表作為在Python中的字典中查找的鍵

[英]Text file list as keys to lookup in dictionary in Python

這是我要完成的工作:輸入與定義的詞典中的鍵相對應的項的文本文件列表,讓程序打印該列表中所有鍵的所有值。 如您所見,字典設置為每個鍵包含多個值。 字典報告單個鍵的值很好,但是我在嘗試使其報告多個鍵(在文本文件列表中定義)的值時遇到問題。

這是代碼:

# open the text file containing a list that will be looked up in the dictionary below 
with open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt', 'r') as lookupfile:
    lookup = str(lookupfile.read().splitlines())

# define output file
output = open('/home/matt/Source/python/fpkm-batch-lookup/output.csv', 'w')

# assign keydict dictionary keys and values as columns in input file
keydict = {}
data = open('/home/matt/Source/python/fpkm-lookup/input.csv', 'r')
for line in data:
    items = line.rstrip('\n').split(',')
    key, values = items[0], items[1:]
    keydict[key] = values

# write out key and values to output file
output.write(lookup + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookup]) + '\n')

嘗試運行它,它返回:

Traceback (most recent call last):
  File "/home/matt/Source/python/fpkm-batch-lookup/run.py", line 17, in <module>
    output.write(lookup + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookup]) + '\n')
KeyError: "['ENSG00000196476_C20orf96', 'ENSG00000247315_ZCCHC3', 'ENSG00000225377_RP5-1103G7.4', 'ENSG00000177732_SOX12', 'ENSG00000101255_TRIB3']"

KeyError消息中列出的項目是lookuplist文本文件中的項目。 我的代碼是否將整個lookuplist文件視為查找的關鍵? 我怎么能把這個文件中的每一行都當作查找鍵呢?

謝謝!

編輯/更新:

使用[0],[1]等指定每個要查找的鍵,然后寫入輸出文件的方法相當不雅。 這是我使用的最終代碼:

# open the text file containing a list that will be looked up in the dictionary below 
lookuplist = open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt').read().splitlines()

# define output file
output = open('/home/matt/Source/python/fpkm-batch-lookup/output.csv', 'w')

# assign keydict dictionary keys and values as columns in input file
keydict = {}
data = open('/home/matt/Source/python/fpkm-lookup/input.csv', 'r')
for line in data:
    items = line.rstrip('\n').split(',')
    key, values = items[0], items[1:]
    keydict[key] = values

# write out key and values to output file - add more if needed

output.write(str(lookuplist[0]) + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookuplist[0]]) + '\n' + '\n')

output.write(str(lookuplist[1]) + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookuplist[1]]) + '\n' + '\n')

output.write(str(lookuplist[2]) + '\n' + str(keydict['Alt Name']) + '\n' + str(keydict[lookuplist[2]]) + '\n' + '\n')

# .... to the nth string number to lookup

想通了,我想為其他想要做同樣事情的人更新。

我想如果你改變

with open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt', 'r') as lookupfile:
    lookup = str(lookupfile.read().splitlines())

with open('/home/matt/Source/python/fpkm-batch-lookup/lookuplist.txt', 'r') as lookupfile:
    lookup = lookupfile.read().splitlines()

你應該靠近一點

但是,我認為您將要一次從查找列表中查找項目,因為查找是一個列表

再次查看您的代碼,盡管我不太確定您在做什么,但我做了一些其他更改,但類似

for key in lookup:
    if key in keydict:
         output.write(key + '\n' + ','.join(keydict[key]) + '\n' +key +'\n')

我在這里確實感覺到了自己的方式,但是根據您所提出的問題,這與我所能達到的結果非常接近。 我找不到對“ Alt名稱”的引用,並且您的代碼沒有指示如何訪問字典中的該鍵,因此我認為它是來自最初讀取的文件中的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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