Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从元组列表中提取相关关键字_Python_List_Dictionary_Tuples_Counting - Fatal编程技术网

Python 从元组列表中提取相关关键字

Python 从元组列表中提取相关关键字,python,list,dictionary,tuples,counting,Python,List,Dictionary,Tuples,Counting,我是Python新手,需要帮助。我有几个词的列表和它们在这种格式中的提及频率: ResponseWeetSaug27=[(“救援”,239),(“逃生”,164),…] 影响tweetsaug27=[('close',1350),('falling',1267),…] 等等。这些列表位于一个文件中,每个列表都有自己的行 许多词频对是不相关的。我需要梳理列表,并提取与此格式的单词主列表相关联的单词频率对: 关键术语=['beprep','gear up','get ready','hurrican

我是Python新手,需要帮助。我有几个词的列表和它们在这种格式中的提及频率:

ResponseWeetSaug27=[(“救援”,239),(“逃生”,164),…]

影响tweetsaug27=[('close',1350),('falling',1267),…]

等等。这些列表位于一个文件中,每个列表都有自己的行

许多词频对是不相关的。我需要梳理列表,并提取与此格式的单词主列表相关联的单词频率对:

关键术语=['beprep','gear up','get ready','hurricaneprep','HurricanePrepare'…]

目标是显示主列表中的单词被提及的次数。我认为这将涉及通过元组列表进行迭代,但我对这一点还不熟悉,需要一个指导。提前谢谢


编辑:我可以分别浏览每个元组列表,但是如果它们有不同的标题,您将如何迭代所有元组列表?

假设您已经从文件中读取列表,并将它们放置在
列表中
变量:

ResponseTweetsAug27 = [('beprep', 239), ('gear up', 164)]

ImpactTweetsAug27 = [('get ready', 1350), ('falling', 1267)]

lists = [ResponseTweetsAug27, ImpactTweetsAug27]

key_terms = ['beprep', 'gear up', 'get ready']

for l in lists:
    for pair in l:
        if pair[0] in key_terms:
            print(pair[0], pair[1])
您可以遍历
列表
。每一项都是一张清单。然后在每个列表(这里称为
l
)中,您对每个对进行迭代,检查名称/标题(无论您如何称呼)是否存在于
key\u terms
中。如果有,你就把它打印出来,以及它们被提及的次数。结果是:

> python tuples.py
beprep 239
gear up 164
get ready 1350

您可以使用
collections.defaultdict
itertools.chain
返回计数字典。对于
关键术语
集合
建议用于O(1)复杂度查找

数据来自@Frynio

ListA = [('beprep', 239), ('gear up', 164)]
ListB = [('get ready', 1350), ('falling', 1267)]

from collections import defaultdict
from itertools import chain

key_terms = {'beprep', 'gear up', 'get ready'}

d = defaultdict(int)

for key, value in chain(ListA, ListB):
    if key in key_terms:
        d[key] += value

print(d)

defaultdict(int, {'beprep': 239, 'gear up': 164, 'get ready': 1350})

好吧,最好不要创建两个列表。这里最好的解决方案是创建一个列表列表并像这样迭代:
对于key,value-in-chain(*list)
。更多generic@Frynio,当然可以,但在这种情况下,您应该使用
链。从_iterable
而不是通过
链(*…)
解包。这实际上有性能或安全性差异吗?我只是问一下,因为我没发现什么docs@Frynio,更高的性能(自己测试),解包需要更多的工作。