尝试根据列表字典中的值类型(int 或 str)打印键
Trying to print keys based on their value type (int or str) from a dictionary of lists
我正在学习访问字典键值和使用列表理解。我的作业要求我:
"Use a while loop that prints only variant names located in chromosomes that do not have numbers (e.g., X)."
我正在使用这个列表字典,其中键是变体名称,列表值中的第零个元素(冒号 ([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"]}
我找到了如何根据列表中第零个元素的长度(染色体名称)打印变体名称:
for rs, info in cancer_variations.items():
tmp_info=info[0].split(":")
if (len(tmp_info[0])>3):
print(rs)
但是我无法打印键值,变体名称,基于染色体名称的 TYPE,列表值中的第零个元素。为此,我设计了这段代码,但我不确定如何表达布尔值以便仅在染色体名称是一种特定类型(Str)或(int)时打印。
for rs, info in cancer_variations.items():
tmp_info=info[0].split(":")
if tmp_info[0] = type.str
print(rs)
我不确定我的语法在这里没有看到什么。
任何帮助将不胜感激。
您需要了解如何确定所需的数据分类。在这种情况下,您只需要将字母数据与数字数据区分开来即可:
if tmp_info[0].isalpha():
print(rs)
应该让你上路。
如果我没理解错的话,你想检查 :
之前的第一部分是否包含数字。
您可以逐个字符迭代字符串并使用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
首先你需要确定你想做什么。
如果你想要区分numeric string
和普通的string
,那么你可能想知道数字字符串是严格由数字组成的;如果您添加任何其他字符,python 不会将其视为数字。你可以通过这个实验证明这一点:
print('23123'.isnumeric())
print('2312ds3'.isnumeric())
结果:
True
False
数字字符串是您要排除的内容,如果我理解的话,在这种情况下,任何其他保持为 str 的字符串都适合。
因此,以这种方式,我们将使用您创建的循环遍历字典:
for rs, info in cancer_variations.items():
tmp_info=info[0].split(":")
if not tmp_info[0].isnumeric():
print(rs)
这导致:
rs1569113445
rs3815148
我正在学习访问字典键值和使用列表理解。我的作业要求我:
"Use a while loop that prints only variant names located in chromosomes that do not have numbers (e.g., X)."
我正在使用这个列表字典,其中键是变体名称,列表值中的第零个元素(冒号 ([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"]}
我找到了如何根据列表中第零个元素的长度(染色体名称)打印变体名称:
for rs, info in cancer_variations.items():
tmp_info=info[0].split(":")
if (len(tmp_info[0])>3):
print(rs)
但是我无法打印键值,变体名称,基于染色体名称的 TYPE,列表值中的第零个元素。为此,我设计了这段代码,但我不确定如何表达布尔值以便仅在染色体名称是一种特定类型(Str)或(int)时打印。
for rs, info in cancer_variations.items():
tmp_info=info[0].split(":")
if tmp_info[0] = type.str
print(rs)
我不确定我的语法在这里没有看到什么。 任何帮助将不胜感激。
您需要了解如何确定所需的数据分类。在这种情况下,您只需要将字母数据与数字数据区分开来即可:
if tmp_info[0].isalpha():
print(rs)
应该让你上路。
如果我没理解错的话,你想检查 :
之前的第一部分是否包含数字。
您可以逐个字符迭代字符串并使用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
首先你需要确定你想做什么。
如果你想要区分numeric string
和普通的string
,那么你可能想知道数字字符串是严格由数字组成的;如果您添加任何其他字符,python 不会将其视为数字。你可以通过这个实验证明这一点:
print('23123'.isnumeric())
print('2312ds3'.isnumeric())
结果:
True
False
数字字符串是您要排除的内容,如果我理解的话,在这种情况下,任何其他保持为 str 的字符串都适合。
因此,以这种方式,我们将使用您创建的循环遍历字典:
for rs, info in cancer_variations.items():
tmp_info=info[0].split(":")
if not tmp_info[0].isnumeric():
print(rs)
这导致:
rs1569113445
rs3815148