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