【问题标题】:Parsing a key, value from file into dictionary using dictionary comprehension使用字典理解将文件中的键、值解析为字典
【发布时间】:2019-07-20 01:05:01
【问题描述】:

我在这个网站上搜索过类似我的例子,但找不到答案。

我正在解析的文件是一个简单的文件,其中键值对用冒号分隔。

one:two
three:four
five:six
seven:eight
nine:ten
sample:demo

我认为应该有一个使用字典理解的简单解决方案。

我的第一次尝试是

fin = open('f00.txt', 'r')

L = {kv[0]:kv[1] for line in fin for kv in line.strip().split(':')}

这个生产

{'o': 'n', 't': 'e', 'f': 'i', 's': 'a', 'e': 'i', 'n': 'i', 'd': 'e'}

我能够得到结果的一种方法是这样

L = {line.strip().split(':')[0]:line.strip().split(':')[1] for line in fin}

但这需要调用 split 两次(索引为 0 和 1)

我能够得到结果的另一种方法是:

d = {}
for line in fin:
    kv = line.strip().split(':')
    d[kv[0]] = kv[1]

{'one': 'two', 'three': 'four', 'five': 'six', 'seven': 'eight', 'nine': 'ten', 'sample': 'demo'}

只是想知道对于什么是微不足道的任务是否有一个简单的理解。

感谢您提供的任何意见。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您可以使用dict 进行理解:

    result = dict(i.strip('\n').split(':') for i in open('filename.txt'))
    

    输出:

    {'one': 'two', 'three': 'four', 'five': 'six', 'seven': 'eight', 'nine': 'ten', 'sample': 'demo'}
    

    【讨论】:

    • 就像我输入相同的答案一样!虽然strip 不需要参数,但我将maxsplit=1 添加到split
    【解决方案2】:
    with open('f00.txt', 'r') as fh:
        d = dict(line.strip().split(':') for line in fh)
    

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 2020-03-31
      • 1970-01-01
      • 2017-09-23
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多