Python - 如何处理带空格的字典
Python - how to handle a dictionary with spaces
我有一个包含如下字典的列表:
[{'DeltaG': -14.36, 'BasePairs': 8, 'Dimer': "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n : |||||||| : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG"}
并且 ['Dimer']
看起来像这样:
5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA
: |||||||| :
3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
如果 Dimer
中的 |
字符不在 N
下方(上部字符串末尾只有一个 N 和位置总是一致的)。
我试过这个解决方案,如果上面的序列之前没有 space,它就可以工作:
for i in results:
if i['Dimer'][107] != '|':
print(i)
我的问题是有时上弦前有spaces(如下)然后位置107
(i['Dimer'][107] != '| ') 变得不正确。谁能帮我解决这个问题?
#这只是一个显示结构的虚拟示例:
5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA
: |||||||| :
3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
谢谢。
您可以使用 itertools.zip_longest
:
d = [
{
"DeltaG": -14.36,
"BasePairs": 8,
"Dimer": "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n : |||||||| : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG",
}
]
from itertools import zip_longest
# control print:
print(d[0]["Dimer"])
print()
print("-" * 80)
print()
for l1, l2, l3 in zip_longest(*d[0]["Dimer"].split("\n")):
if l1 == "N" and l2 == "|" and l3 in "TCGA":
print('Character | under the "N": ', l1, l3)
break
else:
print('No character | under the "N"')
打印:
5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA
: |||||||| :
3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
--------------------------------------------------------------------------------
Character | under the "N": N G
或者:如果只有一个 "N"
:
l1, l2, l3 = d[0]["Dimer"].split("\n")
i = l1.index("N") if "N" in l1 else None
ch2 = l2[i] if i < len(l2) else None
ch3 = l3[i] if i < len(l3) else None
if not i is None and ch2 == "|" and ch3 in "TCGA":
print('Character | under the "N": ', ch3)
打印:
Character | under the "N": G
编辑:检查多个项目:
lst = [
{
"DeltaG": -14.36,
"BasePairs": 8,
"Dimer": "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n : |||||||| : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG",
},
{
"DeltaG": -12.99,
"BasePairs": 6,
"Dimer": "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n :: : |||||| :: : : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAG",
},
]
def is_pipe_under_N(item):
l1, l2, l3 = item["Dimer"].split("\n")
i = l1.index("N") if "N" in l1 else None
ch2 = l2[i] if i < len(l2) else None
ch3 = l3[i] if i < len(l3) else None
return not i is None and ch2 == "|" and ch3 in "TCGA"
for item in lst:
if not is_pipe_under_N(item):
print(item["DeltaG"])
break
打印:
-12.99
我有一个包含如下字典的列表:
[{'DeltaG': -14.36, 'BasePairs': 8, 'Dimer': "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n : |||||||| : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG"}
并且 ['Dimer']
看起来像这样:
5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA
: |||||||| :
3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
如果 Dimer
中的 |
字符不在 N
下方(上部字符串末尾只有一个 N 和位置总是一致的)。
我试过这个解决方案,如果上面的序列之前没有 space,它就可以工作:
for i in results:
if i['Dimer'][107] != '|':
print(i)
我的问题是有时上弦前有spaces(如下)然后位置107
(i['Dimer'][107] != '| ') 变得不正确。谁能帮我解决这个问题?
#这只是一个显示结构的虚拟示例:
5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA
: |||||||| :
3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
谢谢。
您可以使用 itertools.zip_longest
:
d = [
{
"DeltaG": -14.36,
"BasePairs": 8,
"Dimer": "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n : |||||||| : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG",
}
]
from itertools import zip_longest
# control print:
print(d[0]["Dimer"])
print()
print("-" * 80)
print()
for l1, l2, l3 in zip_longest(*d[0]["Dimer"].split("\n")):
if l1 == "N" and l2 == "|" and l3 in "TCGA":
print('Character | under the "N": ', l1, l3)
break
else:
print('No character | under the "N"')
打印:
5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA
: |||||||| :
3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
--------------------------------------------------------------------------------
Character | under the "N": N G
或者:如果只有一个 "N"
:
l1, l2, l3 = d[0]["Dimer"].split("\n")
i = l1.index("N") if "N" in l1 else None
ch2 = l2[i] if i < len(l2) else None
ch3 = l3[i] if i < len(l3) else None
if not i is None and ch2 == "|" and ch3 in "TCGA":
print('Character | under the "N": ', ch3)
打印:
Character | under the "N": G
编辑:检查多个项目:
lst = [
{
"DeltaG": -14.36,
"BasePairs": 8,
"Dimer": "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n : |||||||| : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG",
},
{
"DeltaG": -12.99,
"BasePairs": 6,
"Dimer": "5' TCAGATGTGTATAAGAGACAGGTGTAATCGTTCCGCTTGAATGTGANGCAAGAA\n :: : |||||| :: : : \n3' TAGTCACCTGCGTTCCTGACACTAGCGAGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAG",
},
]
def is_pipe_under_N(item):
l1, l2, l3 = item["Dimer"].split("\n")
i = l1.index("N") if "N" in l1 else None
ch2 = l2[i] if i < len(l2) else None
ch3 = l3[i] if i < len(l3) else None
return not i is None and ch2 == "|" and ch3 in "TCGA"
for item in lst:
if not is_pipe_under_N(item):
print(item["DeltaG"])
break
打印:
-12.99