0

辞書をクリアして並べ替えてから、必要な順序で再アセンブルすることに気付いたと思いましたが、何らかの理由で、辞書が最初の方法で並べ替えられました。

誰かが私を助けることができる場合のコードはここにあります

from operator import itemgetter

n = {}
d = {
 'a': ['2', 'ova', 'no'], 
 'b': ['23', 'movie', 'yes'], 
 'c': ['5', 'show', 'yes'], 
 'd': ['17', 'ova', 'yes'], 
 'e': ['1', 'movie', 'no']
}

for i in d:
    print i, d[i]

print '\n'

l = d.items()
l.sort(key=itemgetter(1)) #l is now sorted by the value of the string holding the integers
d.clear()

for i in l:
    print i[0], i[1]
    d[i[0]] = i[1] 

print '\n'

for i in d:
    print i, d[i] #Why does the dictionary come out to be the same it started from
4

2 に答える 2

10

辞書は本質的に順序付けされていません(ハッシュキーを使用しているため、一意ですが任意です)[これはFAQです]-挿入順序またはPyPiからのレシピを保持するOrderedDict (2.7以降)の使用を検討することをお勧めします-それ以外の場合、順序が必要な場合は、エントリをリストまたは他の順序で保持する必要があります。

于 2012-07-11T00:40:20.000 に答える
4

ジョンが指摘するように、辞書には順序がありません。順序付けをあきらめることで、高速なルックアップが得られます。ただし、次のような並べ替え順序があるため、順序を維持するために必要ない場合があります。

d = {'a':['2', 'ova', 'no'], 'b':['23', 'movie', 'yes'], 'c':['5', 'show', 'yes'], 'd':['17', 'ova', 'yes'], 'e':['1', 'movie', 'no']}
sorted_items = sorted(d.items(), key=itemgetter(1))
for i,v in sorted_items:
    print i, v
于 2012-07-11T00:51:02.143 に答える