出于某种原因,当我尝试将元素附加到我的字典上时,它不会添加到字典上,而只是覆盖数据并仅存储最新的键和项目。对不起,如果这是一个初学者的错误 - 仍在学习词典
def filetodict(vcfFile):
dictionary = {}
with open(vcfFile , 'rb') as file:
for row in csv.reader(file , delimiter = '\t'):
if "#" in row[0]:
continue
dictionary.update( {row[0]:row[1:]} )
return dictionary
答案 0 :(得分:2)
这是一个初学者的错误,但这很常见。我想你在这里混合概念。
字典使用key:value
对保存信息,其中keys
每个字典都是唯一的,它们用于索引信息。
另一方面,列表是由一系列数字索引的序列。与此foo = ['a', 'b', 'c']
一样,可以使用其索引号访问它们,例如:foo[0]
返回'a'
。
因此,关于您的问题,我认为您正在尝试生成通常称为collection
的词典列表。
E.g:
a = [
{'name': 'juan'},
{'name': 'pedro'},
]
所以,关于你的问题,我要做的是这样的事情:
def file_to_collection(vcfFile):
collection = [] # This will hold every dict per row
with open(vcfFile , 'rb') as file:
for row in csv.reader(file , delimiter = '\t'):
if "#" in row[0]:
continue # this ignores the first line, it's okay
collection.append({row[0]: row[1:]})
return collection
希望有所帮助,告诉我这是否是你想要的。
干杯!
答案 1 :(得分:1)
您可以使用的是collections.defaultdict
:
from collections import defaultdict
def filetodict(vcfFile):
d = defaultdict(list)
with open(vcfFile , 'rb') as file:
for row in csv.reader(file , delimiter = '\t'):
if "#" in row[0]:
continue
d[row[0]].extend(row[1:])
return dictionary
答案 2 :(得分:0)
不要使用update来追加,只需这样做:
def filetodict(vcfFile):
dictionary = {}
with open(vcfFile , 'rb') as file:
for row in csv.reader(file , delimiter = '\t'):
if "#" in row[0]:
continue
dictionary[row[0]]=row[1:]
return dictionary
答案 3 :(得分:0)
缩进错误,已更正如下
if "#" in row[0]:
dictionary.update( {row[0]:row[1:]} )
此外,您还可以尝试dictionary[row[0]] = row[1:]