回覆列表
  • 1 # 使用者52510796211

    並不是無序,是undefined。也就是說可能有序可能無序(不要對順序做任何假設)。至於為什麼數字表現得有序而字串不是,因為數字在Python中的雜湊值是特殊的。多說點吧。Python的字典實現其實就是個雜湊表(當然裡面有一些最佳化),每次賦值其實就是計算key的雜湊值然後放到雜湊表的指定位置中。遍歷的話就是從前向後遍歷整個雜湊表。這裡不講處理衝突,就說最簡單的往一個空字典中插入兩個值。先看字串的情況:>>>hash("1")&70>>>hash("2")&73>>>hash("3")&72>>>{"1":1,"2":2}{"1":1,"2":2}>>>{"2":2,"3":3}{"3":3,"2":2}可以看到因為同樣對於字串,第一個就是有序的,第二個就是無序的。為什麼是hash(object)&7Python裡就這麼設計的嘛。要注意的是,Python中雜湊值的生成是可以被影響的,所以上面字串的雜湊值可能會在不同的Python程序中發生變化,導致它們出現在字典中順序的不同。那對於數字,Python中數字的雜湊值是特殊的:>>>hash(1)1>>>hash(2)2>>>hash(3)3所以你會看到它們在字典中是有序的。再次強調的一點是,不要對字典中key的順序做任何的假設,它們可能因為雜湊值的變化,CPython實現的變化而隨時發生改變。如果需要一個保持key的順序的字典型別,請用collections.OrderedDict,即使是在3.6中。順序變化的例子,3.5:>>>{2:2,1:1}{1:1,2:2}3.6:>>>{2:2,1:1}{2:2,1:1}

  • 2 # daazhu2

    字典本身是沒有順序的,雖然可以根據key或value進行排序,當key取數字時,依然是無序的,如:

    a = {1:2, 8:7, 4:5, 6:3}

    print(a)

    顯示的還是輸入的順序

  • 中秋節和大豐收的關聯?
  • 學理科可以學考古專業麼,哪些學校有考古專業?