0

理由はわかりませんが、この関数の最後にあるdictは完全には出力されません。最大4つのキーと値のみが出力され、最初の4つだけです。不思議なことに、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}

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

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のマップです。これは、すべてのキーがディクショナリ内の単一の要素を一意に識別することを意味します。ただし、目的の辞書出力では、単一のキーを複数の異なる値(ABto479やなど9)にマッピングする必要があります。これは不可能です。

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]}
于 2012-11-04T16:45:00.080 に答える