如何计算 python 中每个项目的唯一子项目?
How to count each items unique sub-items in python?
在这个问题中,我只能使用 numpy,特别是我有一个药物及其副作用的 csv 列表,
我想找出每种独特药物的副作用数量。
我有这样的文件
[药一,东西,东西,腰痛
药物一,东西,东西,眼痛
药二,某事,某事,皮肤病
药三,有事,有事,腰疼
药三,东西,东西,休克
关键是创建一个包含药物本身的列表,然后列出附近的副作用数量,我会编写这样的代码
listall = [ ]
filename = "druglist.csv"
file_to_open = open(filename,"r")
counter = 0
for line in file_to_open:
line = line.strip()
line = line.split(",")
if line[0] not in listall:
listall.append(line[0])
counter = counter+1
listall.append(counter)
else:
counter = counter+1
listall.append(counter)
print(listall)
print(counter)
我知道这不是计算每个的独特副作用,也不是为每个成功添加它们。
我找不到任何创建这样的列表以创建直方图分布的原因。
你需要数据结构。对于这个工作,你能不能用一个字典,以药物名称为键,一组副作用为值。
此代码是一个示例,您可能需要对其进行调整,但它应该能说明这个想法。
from collections import defaultdict
filename = "druglist.csv"
file_to_open = open(filename,"r")
drug_side_effects = defaultdict(set)
for line in file_to_open:
line = line.strip().split(",")
drug = line[0]
side_efffects = line[1:]
drug_side_effects[drug].union(set(side_effects))
for drug, side_effects in drug_side_effects.items():
print(f"{drug} has {len(side_effects)}"
那么这里发生了什么?我们创建一个 defaultdict
映射药物名称到一组副作用。我们打开文件并读入每一行。然后我们拆分每一行,其中列表的第一个元素是药物名称,其余是副作用。现在我们通过药物名称访问 defaultdict:如果密钥已经存在,我们将获得一组副作用。如果它不在那里,我们得到一个空集。这个集合,无论是否为空,都被 union
与来自这个 line
的副作用集合相结合,结果,一个包含两个列表的所有唯一元素的集合,然后被存储回字典中在 drug
键下。所以我们最终得到了 {drug:set_of_side_effects} 的字典。然后我们可以打印出每个键(药物名称)和副作用的数量。
根据列表的设置方式,您可能需要对数据进行一些清理,因为 'Back Pain' 和 'backpain' 会显示为两种不同的副作用,但保留为reader.
的练习
在这个问题中,我只能使用 numpy,特别是我有一个药物及其副作用的 csv 列表, 我想找出每种独特药物的副作用数量。 我有这样的文件
[药一,东西,东西,腰痛
药物一,东西,东西,眼痛
药二,某事,某事,皮肤病
药三,有事,有事,腰疼
药三,东西,东西,休克
关键是创建一个包含药物本身的列表,然后列出附近的副作用数量,我会编写这样的代码
listall = [ ]
filename = "druglist.csv"
file_to_open = open(filename,"r")
counter = 0
for line in file_to_open:
line = line.strip()
line = line.split(",")
if line[0] not in listall:
listall.append(line[0])
counter = counter+1
listall.append(counter)
else:
counter = counter+1
listall.append(counter)
print(listall)
print(counter)
我知道这不是计算每个的独特副作用,也不是为每个成功添加它们。 我找不到任何创建这样的列表以创建直方图分布的原因。
你需要数据结构。对于这个工作,你能不能用一个字典,以药物名称为键,一组副作用为值。
此代码是一个示例,您可能需要对其进行调整,但它应该能说明这个想法。
from collections import defaultdict
filename = "druglist.csv"
file_to_open = open(filename,"r")
drug_side_effects = defaultdict(set)
for line in file_to_open:
line = line.strip().split(",")
drug = line[0]
side_efffects = line[1:]
drug_side_effects[drug].union(set(side_effects))
for drug, side_effects in drug_side_effects.items():
print(f"{drug} has {len(side_effects)}"
那么这里发生了什么?我们创建一个 defaultdict
映射药物名称到一组副作用。我们打开文件并读入每一行。然后我们拆分每一行,其中列表的第一个元素是药物名称,其余是副作用。现在我们通过药物名称访问 defaultdict:如果密钥已经存在,我们将获得一组副作用。如果它不在那里,我们得到一个空集。这个集合,无论是否为空,都被 union
与来自这个 line
的副作用集合相结合,结果,一个包含两个列表的所有唯一元素的集合,然后被存储回字典中在 drug
键下。所以我们最终得到了 {drug:set_of_side_effects} 的字典。然后我们可以打印出每个键(药物名称)和副作用的数量。
根据列表的设置方式,您可能需要对数据进行一些清理,因为 'Back Pain' 和 'backpain' 会显示为两种不同的副作用,但保留为reader.
的练习