从另一个列表筛选元组并提取值

2024-06-16 13:12:20 发布

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

我正在处理两个元组列表并推导结果。你知道吗

例如:

A = [('Hi','NNG'),('Good','VV'),...n]
B = [('Happy','VA',1.0),('Hi','NNG',0.5)...n]

首先,我想把A和B之间的单词配对。 比如“嗨”=“快乐”或者“嗨”=“嗨” 第二,如果它们相同且匹配,则匹配单词类。 “NNG”=“NNG”还是“NNG”=“VV” 第三,如果所有这些步骤都匹配,则提取数字! 比如A=[('Hi','NNG')]和B=('Hi','NNG',0.5) 提取0.5

最后,我想把提取出来的所有数字相乘。 在每个A,B中有1000多个元组,所以“for”循环对于找出这个过程是必要的。你知道吗

如何在Python中执行此操作?你知道吗


Tags: 列表for过程步骤数字hi单词元组
3条回答

一种方法是使用set和(可选)字典。这种方法的好处是您还保留了关键数据,以了解您的值的来源。你知道吗

A = [('Hi','NNG'),('Good','VV')]
B = [('Happy','VA',1.0),('Hi','NNG',0.5)]

A_set = set(A)

res = {(i[0], i[1]): i[2] for i in B if (i[0], i[1]) in A_set}

res = list(res.values())
# [0.5]

要将列表中的所有结果相乘,请参见How can I multiply all items in a list together with Python?

解释

  • for i in B进行词典理解。它所做的是返回一个结果元组,遍历B的每个元素。你知道吗
  • 例如,当迭代第一个元素时,您将发现i[0] = 'Happy', i[1] = 'VA', i[2] = 1.0。你知道吗
  • 因为我们循环遍历整个列表,所以我们用前2个元素的元组键构建了一个结果字典。你知道吗
  • 此外,我们还根据所需的逻辑添加了(i[0], i[1]) in A_set过滤条件。你知道吗

尝试以下操作:

A = [('Hi', 'NNG'), ('Good', 'VV')]
B = [('Happy', 'VA', 1.0), ('Hi', 'NNG', 0.5)]

print(', '.join(repr(j[2]) for i in A for j in B if i[0] == j[0] and i[1] == j[1]))
# 0.5

Python的水平如此之高,让人感觉像英语。因此,用最少的经验就可以很容易地写出以下工作方案:

A = [('Hi','NNG'),('Good','VV')]
B = [('Happy','VA',1.0),('Hi','NNG',0.5)]

tot = 1
for ia in A:
    for ib in B:
        if ia == ib[:2]:
            tot *= ib[2]
            break  # remove this line if multiple successful checks are possible
print(tot)  # -> 0.5

相关问题 更多 >