【问题标题】:How to make a list of dictionaries for unknown number of keys in dictionary?如何为字典中未知数量的键制作字典列表?
【发布时间】:2014-12-19 22:50:21
【问题描述】:
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

【问题讨论】:

    标签: python list dictionary key


    【解决方案1】:

    如果每个文件的键列表不同,它最好是函数的参数,就像文件名一样。顺便说一句,使用与 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]
    

    【讨论】:

    • 也感谢您的快速回答和提示 :)
    【解决方案2】:

    这就是字典的用途

    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("|")))
    

    如果它们总是有相同的键,只是它们的数量不同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多