鱼C论坛

 找回密码
 立即注册
查看: 1083|回复: 4

[已解决]新手python求助,逐行比较,第二行和第一行的第二列相同,则对第二行计数

[复制链接]
发表于 2021-11-12 11:10:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求大佬帮忙,第一次发帖,急急急。。。。

数据如下,第一列是顺序排列的
scaffold_1..12548466    6
scaffold_1..12548467    6
scaffold_1..12548468    6
scaffold_1..12548469    6
scaffold_1..12548470    6
scaffold_1..12548471    6
scaffold_1..12548472    6
scaffold_1..12548473    5
scaffold_1..12548474    5
scaffold_1..12548475    5
scaffold_1..12548476    5
scaffold_1..12548477    5
scaffold_1..12548478    5
scaffold_1..12548479    4
scaffold_1..12548480    4
scaffold_1..12548481    4
scaffold_1..12548482    4
scaffold_1..12548483    4

想要的结果输出格式
scaffold_1..12548466        scaffold_1..12548472        6        7
scaffold_1..12548473        scaffold_1..12548478        5        6
scaffold_1..12548479        scaffold_1..12548483        4        5

如果第二行的第二列和第一行的第二列相同,则输出第二列的值和频次,以及第一列开头和结尾(第一列是按顺序排列的)

最佳答案
2021-11-12 12:08:23
本帖最后由 xingkong0214 于 2021-11-12 12:10 编辑
# coding:utf-8


if __name__ == '__main__':
    output_text = dict()
    # 假设数据从文件中读取
    with open(r'test_data.txt', 'r') as f:
        for each_line in f:
            serial_number = each_line.split()[0]
            value = each_line.split()[1]

            # 统计数据,存储到一个字典
            if value not in output_text.keys():
                output_text[value] = {'start': serial_number, 'stop': serial_number, 'count': 1}
            else:
                count = output_text[value]['count'] + 1
                output_text[value]['stop'], output_text[value]['count'] = serial_number, count

    # 按照格式打印内容
    for each_item in output_text:
        print(output_text[each_item]['start'], output_text[each_item]['stop'], each_item, output_text[each_item]['count'])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-12 11:59:22 | 显示全部楼层
本帖最后由 suchocolate 于 2021-11-12 12:24 编辑
s = '''scaffold_1..12548466    6
scaffold_1..12548467    6
scaffold_1..12548468    6
scaffold_1..12548469    6
scaffold_1..12548470    6
scaffold_1..12548471    6
scaffold_1..12548472    6
scaffold_1..12548473    5
scaffold_1..12548474    5
scaffold_1..12548475    5
scaffold_1..12548476    5
scaffold_1..12548477    5
scaffold_1..12548478    5
scaffold_1..12548479    4
scaffold_1..12548480    4
scaffold_1..12548481    4
scaffold_1..12548482    4
scaffold_1..12548483    4'''

d = dict()  # 创建空字典,第二列作key,第一列作为value
for line in s.split('\n'):
    k, v = line.split()
    d.setdefault(v, [])  # setdefault检测key是否存在,不存在就设置key并设置默认值为空列表,用于存储同值的第一列
    d[v].append(k)
for k, v in d.items():  # 打印
    print(f'{v[0]}\t{v[-1]}\t{k}\t{len(v)}')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-12 12:08:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xingkong0214 于 2021-11-12 12:10 编辑
# coding:utf-8


if __name__ == '__main__':
    output_text = dict()
    # 假设数据从文件中读取
    with open(r'test_data.txt', 'r') as f:
        for each_line in f:
            serial_number = each_line.split()[0]
            value = each_line.split()[1]

            # 统计数据,存储到一个字典
            if value not in output_text.keys():
                output_text[value] = {'start': serial_number, 'stop': serial_number, 'count': 1}
            else:
                count = output_text[value]['count'] + 1
                output_text[value]['stop'], output_text[value]['count'] = serial_number, count

    # 按照格式打印内容
    for each_item in output_text:
        print(output_text[each_item]['start'], output_text[each_item]['stop'], each_item, output_text[each_item]['count'])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 13:34:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 13:34:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表