文本文件列表作为在Python中的字典中查找的键

时间:2015-12-31 17:44:26

标签: python list dictionary key

这就是我想要完成的任务:输入与定义词典中的键对应的项目的文本文件列表,让程序打印该列表中所有键的所有值。如您所见,字典设置为包含每个键的多个值。字典报告单个键的值很好,但是我在尝试使用它来报告多个键的值(在文本文件列表中定义)时遇到了问题。

以下是代码:

# 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

想象我更新,对于其他任何想要做同样事情的人来说。

1 个答案:

答案 0 :(得分:1)

我想如果你改变了

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')

我真的很感觉我的方式,但这是我可以根据你的问题得到你的输出。我无法找到对“替代名称”的引用。并且您的代码没有说明如何在字典中访问该密钥,因此我假设它是最初读取的文件中的值。