尝试根据列表字典中的值类型(int或str)打印键

2024-04-27 14:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习访问字典键值和列表理解。我的任务要求我:

"Use a while loop that prints only variant names located in chromosomes that do not have numbers (e.g., X)."

我正在使用这个列表字典,其中键是变体名称,列表值中的第0个元素(冒号([0])左侧的字符集是染色体名称,冒号([1])右侧的字符是染色体位置,[2]值是基因名称

cancer_variations={"rs13283416": ["9:116539328-116539328+","ASTN2"],\
"rs17610181":["17:61590592-61590592+","NACA2"],\
"rs1569113445":["X:12906527-12906527+","TLR8TLR8-AS1"],\
"rs143083812":["7:129203569-129203569+","SMO"],\
"rs5009270":["7:112519123-112519123+","IFRD1"],\
"rs12901372":["15:67078168-67078168+","SMAD3"],\
"rs4765540":["12:124315096-124315096+","FAM101A"],\
"rs3815148":["CHR_HG2266_PATCH:107297975-107297975+","COG5"],\
"rs12982744":["19:2177194-2177194+","DOT1L"],\
"rs11842874":["13:113040195-113040195+","MCF2L"]}

我发现了如何根据列表中第0个元素的长度打印变体名称(染色体名称):

for rs, info in cancer_variations.items():
    tmp_info=info[0].split(":")
    if (len(tmp_info[0])>3):
        print(rs)

但是我在打印键值和变量名时遇到了问题,基于染色体名的类型,列表值中的第0个元素。为此,我设计了这段代码,但我不确定如何表达布尔值,仅当染色体名称是一种特定类型(Str)或(int)时才打印

for rs, info in cancer_variations.items():
    tmp_info=info[0].split(":")
    if tmp_info[0] = type.str
        print(rs)

我不确定我的语法在这里没有看到什么。 任何帮助都将不胜感激


Tags: ininfo名称元素列表字典that变体
3条回答

您需要查看如何确定所需的数据分类。在这种情况下,您只需区分字母数据和数字数据:

if tmp_info[0].isalpha():
    print(rs)

应该可以带你上路了

首先,你需要确定你想做什么

如果您想区分numeric string和普通string,那么您可能想知道数字字符串是严格由数字组成的;如果添加任何其他字符,python不会将其视为数字。你可以通过这个实验来证明这一点:

print('23123'.isnumeric())
print('2312ds3'.isnumeric())

结果:

True
False

您希望排除的是数字字符串,在本例中,任何其他保留为str的字符串都适合,如果我理解的话

因此,以这种方式,我们将使用您所做的循环在dict上进行迭代:

for rs, info in cancer_variations.items():
    tmp_info=info[0].split(":")
    if not tmp_info[0].isnumeric():
        print(rs)

其结果是:

rs1569113445
rs3815148

如果我没弄错的话,您需要检查:之前的第一部分是否包含数字

您可以逐字符迭代字符串并使用str.isnumeric()检查字符是否为数字。如果any字符是一个数字,请继续下一项:

cancer_variations = {
    "rs13283416": ["9:116539328-116539328+", "ASTN2"],
    "rs17610181": ["17:61590592-61590592+", "NACA2"],
    "rs1569113445": ["X:12906527-12906527+", "TLR8TLR8-AS1"],
    "rs143083812": ["7:129203569-129203569+", "SMO"],
    "rs5009270": ["7:112519123-112519123+", "IFRD1"],
    "rs12901372": ["15:67078168-67078168+", "SMAD3"],
    "rs4765540": ["12:124315096-124315096+", "FAM101A"],
    "rs3815148": ["CHR_HG2266_PATCH:107297975-107297975+", "COG5"],
    "rs12982744": ["19:2177194-2177194+", "DOT1L"],
    "rs11842874": ["13:113040195-113040195+", "MCF2L"],
}

for k, (v, *_) in cancer_variations.items():
    if not any(ch.isnumeric() for ch in v.split(":")[0]):
        print(k)

印刷品:

rs1569113445

相关问题 更多 >