如何在字典中为未知数量的键创建字典列表?

时间:2014-12-19 22:50:21

标签: python list dictionary key

def list(file_name):
    list = []
    with open(str(file_name)+".txt") as file:
        for line in file.readlines():
            s = line.split("|")
            list.append({key1:s[0], key2:s[1],...})
    return list 

现在我遇到的问题是:我有一些字典列表可以从不同的文件创建。并非所有文件都需要相同数量的密钥。问题是如何使这些键在不同情况下变化。如果我定义这样的函数

def dictionary(file_name):
    if file_name == "something":
        dictionary = {key1:s[0],...}

问题是没有为此函数定义s(应该拆分)。如果你们中的任何人有任何想法如何解决这个问题,请帮忙。提前致谢:D

2 个答案:

答案 0 :(得分:1)

那是什么词典

keys = {
    "file1.txt":["KEYS1","Keys2","Etc"]
}

for i,key in enumerate(keys.get(fname,[])):
    dictionary[key] = s[i]

或者你可以做类似

的事情
all_keys = ["key1","key2","etc","keyn"]
for line in file:
    data = dict(zip(all_keys,line.split("|")))

如果他们总是拥有相同的密钥,只有不同数量的密钥

答案 1 :(得分:1)

如果每个文件的键列表不同,最好是函数的参数,就像文件名一样。而BTW,使用与内置标识符(例如list)冲突的名称是一种可怕的做法,因此,修复它:

def makelist(filename, keys):
    result = []
    with open('%s.txt' % filename) as f:
        for line in f:
            result.append(dict(zip(keys, line.split('|'))))
    return result

或者,如果一个人更喜欢简明扼要的清晰度,

def makelist(filename, keys):
    with open('%s.txt' % filename) as f:
        return [dict(zip(keys, line.split('|'))) for line in f]