0

これが私のプログラムの一部です:

print(str(alphabet) + " ")
alphabet = OrderedDict(alphabet, key=lambda x: x[0])
print(str(alphabet) + " ")

その部分の端末への出力は次のとおりです。

{' ': (57301, 0.16656008557492746), 'a': (23596, 0.06858783929121637), 'c': (8761, 0.025466098492555794), 'b': (5129, 0.014908756896281095), 'e': (32343, 0.0940132431851081), 'd': (9401, 0.027326423002912572), 'g': (6125, 0.01780388691552383), 'f': (5582, 0.016225517838768), 'i': (24438, 0.0710353287251545), 'h': (10526, 0.03059652468127409), 'k': (1985, 0.005769912739153436), 'j': (622, 0.001808002883502991), 'm': (9517, 0.027663606820414736), 'l': (12504, 0.0363460901210955), 'o': (20552, 0.05973967083883195), 'n': (19586, 0.05693174353101219), 'q': (840, 0.0024416759198432674), 'p': (8986, 0.0261201188282281), 's': (20204, 0.05872811938632545), 'r': (18284, 0.053147145855255123), 'u': (7068, 0.020544958811252637), 't': (26396, 0.07672675902402726), 'w': (3767, 0.010949753797678083), 'v': (3136, 0.0091155901007482), 'y': (3600, 0.010464325370756861), 'x': (3004, 0.008731898170487114), 'z': (773, 0.0022469231976652926)} 
OrderedDict([(' ', (57301, 0.16656008557492746)), ('a', (23596, 0.06858783929121637)), ('c', (8761, 0.025466098492555794)), ('b', (5129, 0.014908756896281095)), ('e', (32343, 0.0940132431851081)), ('d', (9401, 0.027326423002912572)), ('g', (6125, 0.01780388691552383)), ('f', (5582, 0.016225517838768)), ('i', (24438, 0.0710353287251545)), ('h', (10526, 0.03059652468127409)), ('k', (1985, 0.005769912739153436)), ('j', (622, 0.001808002883502991)), ('m', (9517, 0.027663606820414736)), ('l', (12504, 0.0363460901210955)), ('o', (20552, 0.05973967083883195)), ('n', (19586, 0.05693174353101219)), ('q', (840, 0.0024416759198432674)), ('p', (8986, 0.0261201188282281)), ('s', (20204, 0.05872811938632545)), ('r', (18284, 0.053147145855255123)), ('u', (7068, 0.020544958811252637)), ('t', (26396, 0.07672675902402726)), ('w', (3767, 0.010949753797678083)), ('v', (3136, 0.0091155901007482)), ('y', (3600, 0.010464325370756861)), ('x', (3004, 0.008731898170487114)), ('z', (773, 0.0022469231976652926)), ('key', <function <lambda> at 0x1619f30>)])

ご参考までに、これはファイル内のすべての文字をカウントしています。タプルの値は、この文字が発生する回数と確率です。

'('key', at 0x1619f30>)' を追加するのはなぜですか?

4

2 に答える 2

1

辞書にアルファベット順にキーがあることを確認しようとしていますか? その場合は、最初に並べ替えた後、一度に 1 つずつ OrderedDict に挿入する必要があります。次のコードはそれを行います。

# Extract keys from dictionary into list and sort them
keys = list(alphabet).sort()

# Now insert them into the new ordered dictionary.
d = OrderedDict() 
for k in keys:
    d[k] = alphabet[k]

Python 2.7+ を使用している場合は、辞書内包表記を使用して、すべてを一気に実行できます。

d = {k: alphabet[k] for k in list(alphabet).sort()}
于 2013-11-16T19:24:51.493 に答える
1

OrderedDict は特別な引数を受け入れないkeyため、その引数は通常のキーとして dict に追加されただけです。

ただし、コードの外観から、OrderedDict についてより根本的な誤解があると思います。ドキュメントを読みましたか?

順序付き辞書は通常の辞書と同じですが、項目が挿入された順序を記憶しています。

私が強調したことに注意してください。OrderedDict の「Ordered」は、「並べ替えられた」という意味ではありません。アイテムは決して互いに比較されません。追加された順序のみを記憶します。

于 2013-11-16T19:24:55.357 に答える