gpt4 book ai didi

python - 用模式解析数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:27 24 4
gpt4 key购买 nike

我正在使用以下模式解析一些数据:

tagA:
titleA
dataA1
dataA2
dataA3
...

tagB:
titleB
dataB1
dataB2
dataB3
...

tagC:
titleC
dataC1
dataC2
...
...

这些标签存储在列表list_of_tags中,如果我迭代列表,我可以获得所有标签;另外,如果迭代标签,我可以获得标题和与标题关联的数据。

我的数据中的标签几乎类似于 <div> ,所以它们对我没有用;我想做的是构建一个字典,它使用标题作为键,使用数据作为值列表。

构建的字典看起来像:

{
titleA: [dataA1, dataA2, dataA3...],
titleB: [dataB1, dataB2, dataB3...],
...
}

请注意,每个标签仅包含一个标题一些数据,并且标题始终位于数据之前

这是我的工作代码:

方法一:

result = {}
for tag in list_of_tags:
list_of_values = []
for idx, elem in enumerate(tag):
if not idx:
key = elem
else:
construct_list_of_values()
update_the_dictionary()

实际上,方法1效果很好,给了我想要的结果;但是,如果我将这段代码放入 PyCharm 中,它会在最后一行警告我“局部变量‘key’可能在赋值之前被引用”。因此,我尝试另一种方法:

方法2:

result = {tag[0]: tag[1:] for tag in list_of_tags}

如果标签是列表,方法 2 可以正常工作,但如果标签是生成器,我也希望代码能够正常工作('generator' object is not subscriptable 将在方法 2 中出现)

为了使用生成器,我想出了:

方法3:

key_val_list = [(next(tag), list(tag)) for tag in list_of_tags]
result = dict(key_val_list)

方法3也有效;但我不能在字典理解中写这个( {next(tag): list(tag) for tag in list_of_tags} 会给出 StopIteration 异常,因为 list(tag) 将首先被评估)

所以,我的问题是,是否有一种优雅的方法来处理这种模式,无论标签是列表还是生成器,它都可以工作? (方法1似乎对两者都有效,但我不知道是否应该忽略PyCharms给出的警告;另外两种方法看起来更简洁,但一种只能在列表上工作,而另一种只能在生成器上工作)

很抱歉问了这么长的问题,感谢您的耐心等待!

最佳答案

我猜 PyCharm 向您发出警告的原因是您在 update_the_dictionary 中使用 key,但 key 可能未分配if tag 不包含至少一个元素。您可能知道标题将始终位于列表中,但静态分析器无法从上下文中推断出这一点。

如果您使用的是 Python 3,您可能想尝试使用 PEP 3132 - Extended Iterable Unpacking 。它应该适用于列表和生成器。

例如

title, *data = tag

关于python - 用模式解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28124077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com