gpt4 book ai didi

python - 创建一个没有重复项的字典

转载 作者:行者123 更新时间:2023-12-01 01:16:20 25 4
gpt4 key购买 nike

我正在尝试从 CSV 创建一个没有重复项的字典。 CSV 文件包含:样本名称(s1、s2 等)、基因名称、样本 1 突变的影响、样本 2 突变的影响。以下是 CSV 文件的两行示例:

s1, s2, gene1, MODERATE, HIGH
s3, s4, gene2, HIGH, MODERATE

我的目标是获得有多少样本发生特定基因突变的摘要,以及该突变是否具有高影响力。

举个例子:

gene12  7   ['s1', 's3', 's4', 's10 [HIGH]', 's17', 's19', 's24 [HIGH]']
gene20 2 ['s10 [HIGH]', 's21']

目前我的代码如下所示:

import os
import sys

path = ("path/to/csv")
open_csv = open(path+"csvfile", "r")
read_csv = open_csv.read().splitlines()
gene_dict = {}
for line in read_csv:
split_lines = line.split(", ")
gene = split_lines[2]
sample1 = split_lines[0]
sample2 = split_lines[1]
impact1 = split_lines[3]
impact2 = split_lines[4]
for i in range(0, len(read_csv):
if gene in gene_dict:
if impact1 == "HIGH":
gene_dict[gene].append(sample1+" [HIGH]")
if impact2 == "HIGH":
gene_dict[gene].append(sample2+" [HIGH]")
else:
gene_dict[gene].append(sample1)
gene_dict[gene].append(sample2)
else:
gene_dict[gene] = [sample1]

final_dict = {a:list(set(b)) for a, b in gene_dict.items()}

for key, value in final_dict.items():
genename = key
num_samples = len([item for item in value if item])
samples = value
print(genename,num_samples,samples)

我的脚本可以工作,只是我得到了重复的样本。我的意思是,如果一个样本的基因中存在高影响突变,那么最终的摘要将将该样本列出两次。下面是我的意思的一个例子:

gene12  8   ['s1', 's3', 's4', 's10 [HIGH]', 's17', 's19', 's24', 's24 [HIGH]']
gene20 3 ['s10', 's10 [HIGH]', 's21']

这可能是我创建字典的方式导致了重复,但我无法弄清楚。您会看到对于gene12,s24 列出了两次,从而导致计数困惑。对于具有 s10 的基因 20 也会发生这种情况。样本被列出两次,一次正确地列为具有高影响突变,另一次正确地列为不具有高影响突变。然而,s24 仅在基因 12 中具有高影响突变,而 s10 仅在基因 20 中具有高影响突变。我希望这是有道理的。如果需要的话我可以澄清。预先感谢您的任何和所有帮助!

最佳答案

看起来你的内部循环 for i in range(0, len(read_csv): 正在重复并添加无用的命中。还有 if/if/else 结构并添加 [HIGH ] 标记看起来已损坏。

更正版本:

import os
import sys

path = ("path/to/csv")
open_csv = open(path+"csvfile", "r")
read_csv = open_csv.read().splitlines()
gene_dict = {}
for line in read_csv:
split_lines = line.split(", ")
gene = split_lines[2]
sample1 = split_lines[0]
sample2 = split_lines[1]
impact1 = split_lines[3]
impact2 = split_lines[4]
if impact1 == "HIGH":
sample1 = sample1 + " [HIGH]"
if impact2 == "HIGH":
sample2 = sample2 + " [HIGH]"

if gene in gene_dict:
gene_dict[gene].append(sample1)
gene_dict[gene].append(sample2)
else:
gene_dict[gene] = [sample1, sample2]

final_dict = {a:list(set(b)) for a, b in gene_dict.items()}

for key, value in final_dict.items():
genename = key
num_samples = len([item for item in value if item])
samples = value
print(genename,num_samples,samples)

对于我尝试过的几个例子来说,这看起来是一致的。

关于python - 创建一个没有重复项的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54314621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com