【问题标题】:Load options dictionary using generator expression使用生成器表达式加载选项字典
【发布时间】:2014-04-23 09:50:28
【问题描述】:

我有这种格式的选项文件:

key value\t\n

N:B:. 一些值在其后显示制表符。

我使用类似代码:

        src               = open("conf.cfg").readlines()
        item          =  item.split(" ")[0:2]
        key           =   item[0]
        value         =   item[1]
        dict_[key]    = value

我可以使用生成器表达式得到相同的结果吗??

【问题讨论】:

    标签: python dictionary generator-expression


    【解决方案1】:

    您可以使用字典推导,例如:

    with open("conf.cfg") as f:
        dict_ = {key: value 
                 for key, value in (line.strip().split(" ")[:2] 
                                    for line in f)}
    

    【讨论】:

    • 值得注意的是,这是一个字典理解,而不是生成器表达式。
    【解决方案2】:

    也许这样:

    with open('config.txt') as f:
        dict_ = {k: v for k, v in (line.split() for line in f.readlines())}
    

    【讨论】:

      【解决方案3】:

      是的,你可以使用生成器表达式,它看起来像这样:

      with open("conf.cfg") as f:
          dict_ = dict(line.split() for line in f)    
      

      我假设您在键或值中没有空格。如果其中有空格(以及“它们被引用”字符串),那么使用csv 模块阅读文件会更容易。

      【讨论】:

        【解决方案4】:

        使用生成器函数:

        def myGenerator():
            with open("conf.cfg") as f:
                for line in f.readlines():
                    yield(line.split())
        
        result = {k:v for k,v in myGenerator()}
        
        print result
        

        【讨论】:

        • 你为什么在这里使用defaultdict而不是dict
        • 感谢您指出..我正在尝试使用 defaultdict 并忘记清理。现在,我已经修改了……现在看起来好多了……再次感谢……
        猜你喜欢
        • 2012-03-06
        • 1970-01-01
        • 2022-07-18
        • 2012-03-25
        • 2016-06-28
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        相关资源
        最近更新 更多