Python - 附加到字典

时间:2017-08-09 16:02:37

标签: python dictionary

出于某种原因,当我尝试将元素附加到我的字典上时,它不会添加到字典上,而只是覆盖数据并仅存储最新的键和项目。对不起,如果这是一个初学者的错误 - 仍在学习词典

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

4 个答案:

答案 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:]