为什么我的字典打印不正确?

时间:2012-11-04 16:15:17

标签: python-3.x

我不知道为什么,但是这个函数末尾的字典将无法完全打印。它最多只能打印四个键+值,它们只是前四个键。奇怪的是,第3和第4位出现在相反的位置。

genelist = ['ABC', 'abc', 'Abc', 'aBC', 'ABc', 'abC', 'AbC', 'aBc']

def recombAB(x):

    rec_total = 0
    primlistAB = []
    for item in x:
        split = list(item)
        del split[2]
        primlistAB = primlistAB + split

    listAB = [primlistAB[0] + primlistAB[1], primlistAB[2] + primlistAB[3], primlistAB[4] + primlistAB[5], primlistAB[6] + primlistAB[7], primlistAB[8] + primlistAB[9], primlistAB[10] + primlistAB[11], primlistAB[12] + primlistAB[13], primlistAB[14] + primlistAB[15]]

    print(listAB)

    dictAB = {listAB[0] : freq1, listAB[1] : freq2, listAB[2] : freq3, listAB[3] : freq4, listAB[4] : freq5, listAB[5] : freq6, listAB[6] : freq7, listAB[7] : freq8}


    print(dictAB)

recombAB(genelist)

这给了我listAB = ['AB','ab','ab','aB','AB','ab','ab','aB']

并且dictAB = {'AB':9,'ab':9,'aB':1,'Ab':1}

当我正在寻找的是{'AB':479,'ab':473,'Ab':15,'aB':13,'AB':9,'ab':9,'Ab ':1,'aB':1}

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

当我部分运行您的代码时,通过调用genelist作为参数的函数,我得到listAB的以下输出:

['AB', 'ab', 'Ab', 'aB', 'AB', 'ab', 'Ab', 'aB']

如果你仔细观察,那里你有重复的值,基本上只有4个不同的值。

因此,在构建字典时,可以为同一个键指定多个值,覆盖以前的值。

  

我正在寻找的是{'AB':479, 'ab':473, 'Ab':15, 'aB':13, 'AB':9, 'ab':9, 'Ab':1, 'aB': 1 }

字典是从键到值的1对1映射。这意味着每个键唯一地标识字典中的单个元素。但是在您想要的词典输出中,您可以使用单个键映射到多个不同的值(例如AB4799)。这是不可能的。

如果您不需要map-property但只想存储值对,则可以改为使用元组列表:

[('AB', 479), ('ab', 473), ('Ab', 15), ('aB', 13), ('AB', 9), ('ab', 9), ('Ab', 1), ('aB', 1)]

或者,如果您确实需要能够从“密钥”中查找值,则可以通过映射到值列表来创建多值字典:

{'AB': [479, 9], 'ab': [473, 9], 'Ab': [15, 1], 'aB': [13, 1]}