从另一个列表中过滤元组并提取值

时间:2018-04-04 11:41:19

标签: python list tuples

我正在处理两个元组列表并推断结果。

例如:

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

首先,我想匹配A和B之间的单词。        比如'Hi'='Happy'或'Hi'='Hi' 其次,如果它们相同并匹配,则匹配单词类。         'NNG'='NNG'或'NNG'='VV' 第三,如果所有这些步骤都匹配,那么提取数字!        比如A = [('Hi','NNG')]和B =('Hi','NNG',0.5)        提取0.5

最后,我想将所有数字与提取相乘。 每个A,B中有超过1,000个元组。所以'for'循环对于找到这个过程是必要的。

我怎样才能在Python中执行此操作?

4 个答案:

答案 0 :(得分:1)

尝试这样的事情:

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

答案 1 :(得分:0)

一种方法是使用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
  • 由于我们循环遍历整个列表,我们使用前两个元素中的元组键构造结果字典。
  • 此外,我们会根据所需逻辑添加标准(i[0], i[1]) in A_set进行过滤。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

zip()是你的朋友:

for tupA,tupB in zip(A,B):
    if tupA[:2] == tupB[:2] : print(tupB[2])

使用花式pythonic列表理解:

results = [tubB[2] for tubA,tubB in zip(A,B) if tubA[:2] == tubB[:2] ]

但是......为什么我有一种偷偷摸摸的感觉,这不是你想要做的?