Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File_Itertools - Fatal编程技术网

Python 为什么';发生的次数没有增加吗?

Python 为什么';发生的次数没有增加吗?,python,file,itertools,Python,File,Itertools,这是我的问题:我有一个字典(dico),我想计算两个不同的键在文件“file.tsv”中出现在同一行的次数,如下所示: sp_345_4567 pe_645_456787 ap_456_45678 pe_645_4556789。。。 sp_345_567 pe_645_45678。。。 pe_645_45678 ap_456;_345678。。。 sp_345_56789 ap_456_345。。。 pe_645_45678 ap_456;_345678。。。 sp_345_56789 ap_4

这是我的问题:我有一个字典(
dico
),我想计算两个不同的键在文件“file.tsv”中出现在同一行的次数,如下所示:

sp_345_4567 pe_645_456787 ap_456_45678 pe_645_4556789。。。
sp_345_567 pe_645_45678。。。
pe_645_45678 ap_456;_345678。。。
sp_345_56789 ap_456_345。。。
pe_645_45678 ap_456;_345678。。。
sp_345_56789 ap_456_345。。。
...
例如,香蕉键和苹果键的值出现在第1行,因此无论它们出现多少次,它们仍然存在,因此我们有一行共同点,我想在文件的所有行上都这样做

为此,我在每个值后面添加了模式
“\uw+”
,然后用函数
re.search
生成一个正则表达式

from itertools import product
import csv

dico = {
    "banana": "sp_345",
    "apple": "ap_456",
    "pear": "pe_345",
    "cherry": "ap_345",
    "coco": "sp_543",
}

counter = {}
with open("file.tsv") as file:
    reader = csv.reader(file, delimiter="\t")
    for line in reader:
        for key1, key2 in product(dico, dico):
            if key1 >= key2:
                continue
            counter[key1, key2] = 0
            k1 = k2 = False
            for el in line:
                if re.search(dico[key1]+'_\w+', el):
                    k1 = True
                elif re.search(dico[key2]+'_\w+', el):
                    k2 = True
                if k1 and k2:
                    counter[key1, key2] += 1
                    break

for key, val in counter.items():
    print(key, val)
但出现的次数在0处停止:

苹果香蕉0 梨香蕉0 梨苹果0
k1
k2
不能同时为
True
,因为您正在使用
False
初始化这两个属性,并将最多一个设置为
True

elif re.search(dico[key2]+'_\w+', el):
    k2 = True
应该是

if re.search(dico[key2]+'_\w+', el):
     k2 = True

对不起,我不太清楚你在问什么。你的预期产出是多少?您是否试图找到出现在同一行上的所有项目对组合并进行计数?您是否可以截断输入文件,使其在特定环境中仍然可用?谢谢