我试图读取一个文本文件,然后使用该文件中的数据创建一个字典。文本的一个例子是:
100
Mulan
300, 500
200, 400
200
Ariel
100, 500
500
300
Jasmine
500
500, 100
400
Elsa
100, 500
500
Belle
200, 300
100, 200, 300, 400
我需要将第一行作为字典的键,第二行、第三行和第四行作为该键的值。在
到目前为止,我的代码如下:
^{pr2}$但这会返回一些奇怪的东西:
{'100': [], 'Mulan': [], '300,': ['500'], '200,': ['300'], '200': [], 'Ariel': [], '100,': ['200,', '300,', '400'], '500': [], '300': [], 'Jasmine': [], '500,': ['100'], '400': [], 'Elsa': [], 'Belle': []}
显然,这个函数将每行的第一个值作为键,这不是我想要的。我需要输出如下所示:
{100: ('Mulan', [300, 500], [200, 400]),
200: ('Ariel', [100, 500], [500]),
300: ('Jasmine', [500], [500, 100]),
400: ('Elsa', [100, 500], []),
500: ('Belle', [200, 300], [100, 200, 300, 400])}
有谁能帮我弄清楚如何实现这一点,或者具体地说,如何从文本文件中提取多行作为字典中的值?在
这应该是一种更短、更直观的方法:
当您在这里打开文件时,我们使用
with
上下文管理器,并使用Python的标准模块库itertools.groupby
将文件拆分为空换行符分隔的块。然后对于每个块,使用第一个项作为字典中的键,并将每个后续项放入元组中。它还以列表形式返回整数对,如果不满足示例中预期的行数,则返回空列表。在另一个需要考虑的有趣场景是,当键和值之间缺少行时,上面的解决方案将无法提供正确的输出,例如:
^{pr2}$对于这个场景,我们希望数据是5块,包括换行符。然后我们可以利用Python配方here中的grouper函数,一次从文件中抓取5行。我们也可以使用helper函数显式地从整数对中返回数据。在
这将适用于缺少行的文件,其中行号指示数据块或结构。在
一个类似于Maik-Kahnt的解决方案,它还包括Elsa的空列表,并且还依赖于每个记录有5行。在
输出为:
^{pr2}$选项1
看看你的例子,名字后面必须有两个列表。如果第二个是空的,你希望那里有一个空列表。因此,您已经在数据中强制使用了“5行定义字典条目”的结构。。阅读时不妨使用:
结果就是你想要的。在
^{pr2}$“if not n%d==0:”部分添加空行,直到有一个5的倍数的总和。这样,“belle”条目会被添加,甚至很难在您的数据文件中只有24行。在
选项2
如果您不需要空列表,可以从这里开始:
输出:
我知道这不是你的产出。但正如我所说:如果这些空名单并不重要,你可以从这里开始工作。在
相关问题 更多 >
编程相关推荐