如何在python中创建两个字典,在.txt文件中用空格分隔

2024-09-29 19:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助,我想知道如何用python制作两个字典,在一个.txt文件中用空格分隔

文件的外观如下所示:

value1 value10
value2 value20
value3 value30

var1 var10
var2 var20
var3 var30

我希望输出像这样:

{'value1': value10, 'value2': value20, 'value3': value30}, {'var1': var10, 'var2': var20, 'var3': var30}

我已经测试了很多可能性,但是这个代码不起作用,因为实际上,我有这个

{'value1': 'value10'}
{'value1': 'value10', 'value2': 'value20'}
{'value1': 'value10', 'value2': 'value20', 'value3': 'value30'}
{'value1': 'value10', 'value2': 'value20', 'value3': 'value30', 'var1': 'var10'}
{'value1': 'value10', 'value2': 'value20', 'value3': 'value30', 'var1': 'var10', 'var2': 'var20'}
{'value1': 'value10', 'value2': 'value20', 'value3': 'value30', 'var1': 'var10', 'var2': 'var20', 'var3': '

你能帮帮我吗, 我的代码实际上是:

dictionnary = {}

lector = open("file.txt","r")
file = lector.readlines()

for i in range(0,len(file)):

  if len(file[i].split()) == 2 :
    first_val = file[i].split()[0]
    second_val = file[i].split()[1]

    dictionnary.update({first_val : second_val})
    print(dictionnary)

Tags: valfilesplitvalue1value2var1var2var3
3条回答

您可以使用itertools.groupby对块进行分组:

from itertools import groupby

out = [
    dict(map(str.split, g))
    for v, g in groupby(
        open("your_file.txt", "r"), lambda line: len(line.split()) == 2
    )
    if v
]

print(out)

印刷品:

[{'value1': 'value10', 'value2': 'value20', 'value3': 'value30'}, {'var1': 'var10', 'var2': 'var20', 'var3': 'var30'}]

您需要确保检测到空行(相当于双换行)。下面是如何使用列表理解来完成此操作:

with open("file.txt", "rt") as r:
    contents = r.read()

dicts = [
    dict(
        line.split(" ", 1)
        for line in block.split("\n")
    )
    for block in contents.strip().split("\n\n")
]
dicts
# => [{'value1': 'value10', 'value2': 'value20', 'value3': 'value30'}, {'var1': 'var10', 'var2': 'var20', 'var3': 'var30'}]

我接收整个文件,打算手动拆分行。首先删除最外层的换行符(如果有的话),然后在内部的双换行符上拆分。这会产生块;按换行符拆分这些行可以生成行,这些行可以按空格拆分以生成键和值。块的所有键值对都被送入dict构造函数

与您所做的更接近:

current = {}
dicts = []
for line in file:
    items = line.split(" ", 1)
    if len(items) == 2:
        current[items[0]] = items[1]
    else:
        dicts.append(current)
        current = {}
if current:
    dicts.append(current)

您还可以使用生成器将每个数据系列组合成一个dict,然后将生成器生成一个列表

def get_dicts(lines):
    d = {}
    for line in lines:
        if line == "\n" and d:
            yield d
            d = {}
        else:
            k, v = line.split(' ')
            d[k] = v.strip()
    if d:
        yield d


def main():
    with open('file.txt') as f:
        output = list(get_dicts(f.readlines()))
        print(output)


if __name__ == '__main__':
    main()

输出:

[{'value1': 'value10', 'value2': 'value20', 'value3': 'value30'}, {'var1': 'var10', 'var2': 'var20', 'var3': 'var30'}]

相关问题 更多 >

    热门问题