gpt4 book ai didi

python - 有条件地创建列表列表

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

我不知道我的措辞是否最好,但本质上我想根据不同的条件创建一个列表列表。

我使用 ElementTree 读取了一些 XML 数据,在解析它之后,我遍历树并将所有标签放在一个名为 tags 的列表中,并将它们的值放在一个名为 vals 的列表中

在我的标签列表中,有几个句子标签,我想将它们作为字典的键,并将相应的值附加到列表中并作为值。

我的标签列表、它们的对应值和句子标签如下所示。

tags = ['irrel', 'TAG_ONE', 'TAG_ONE', 'TAG_TWO', 'TAG_ONE', 'TAG_TWO', 'irrel']

vals = ['not_rel', 1, 2, 5, 3, 6, 'not_rel']

sent_tags = ['TAG_ONE', 'TAG_TWO']

我理想的输出是 tags_dict = {'TAG_ONE': [1, 2, 3], 'TAG_TWO': [5, 6]} 我使用下面的代码实现了。

sent_vals = list()

# Make a list of all TAG_ONE values and append list to sentence values list
tag_one = list()
tag_one_locs = [i for i, x in enumerate(tags) if x == 'TAG_ONE']
for t in tag_one_locs:
tag_one.append(vals[t])
sent_vals.append(tag_one)

# make a list of all TAG_TWO values and append list to sentence values list
tag_two = list()
tag_two_locs = [i for i, x in enumerate(tags) if x == 'TAG_TWO']
for tt in tag_two_locs:
tag_two.append(vals[tt])
sent_vals.append(tag_two)

tags_dict = dict(zip(sent_tags, sent_vals))

然而,这相当丑陋,而且仅仅复制和粘贴代码一百万次是不切实际的,因为我的真实数据有大约 70 个句子标签。我在如何将代码简化为某种列表理解(或其他东西)方面一片空白。

最佳答案

好吧,您可以使用 collections.defaultdict(list)

大大简化它
  • 将标签和值压缩在一起
  • 如果标签匹配感兴趣的标签之一,添加到字典

像这样:

import collections

tags = ['irrel', 'TAG_ONE', 'TAG_ONE', 'TAG_TWO', 'TAG_ONE', 'TAG_TWO', 'irrel']

vals = ['not_rel', 1, 2, 5, 3, 6, 'not_rel']

sent_tags = {'TAG_ONE', 'TAG_TWO'} # set is preferred when a lot of elements (faster "in" lookup)

tags_dict = collections.defaultdict(list)

for tag,val in zip(tags,vals):
if tag in sent_tags:
tags_dict[tag].append(val)

print(dict(tags_dict)) # convert to dict just to print

结果:

{'TAG_TWO': [5, 6], 'TAG_ONE': [1, 2, 3]})

关于python - 有条件地创建列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812750/

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