[問卦] Python 怎麼到現在還沒內建 sortedMap ??

看板Gossiping作者 (二乃騎士)時間4年前 (2019/11/10 03:00), 4年前編輯推噓22(26434)
留言64則, 29人參與, 4年前最新討論串1/1
這裡所謂的 sorted map 指的是以key值進行排序的 map, 不管讀取增加還是刪除的時間複雜度都是 o(log n) 這種map Java在1.2版就已經有了, 而我剛剛才發現Python的標準函式庫到現在還沒有 zzzzzzzzzzzzzzzzzzzzzzzzz 他媽的總不會要使用者自己實現紅黑樹吧? 幹你娘勒 有沒有Python到現在還沒有sorted map 的八卦啊? -- 「他不能睡車上嗎?」 ~中野二乃 https://i.imgur.com/s9ENvjt.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 71.198.27.180 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1573326040.A.B60.html

11/10 03:03, 4年前 , 1F
import 二乃
11/10 03:03, 1F

11/10 03:05, 4年前 , 2F
說起來這類簡單儲存資料結構有沒有什
11/10 03:05, 2F

11/10 03:05, 4年前 , 3F
難道你要用java?
11/10 03:05, 3F
Java很好啊 Java臭了嗎?臭了嗎?臭了嗎?臭了嗎?

11/10 03:05, 4年前 , 4F
麼公認的標準測資阿
11/10 03:05, 4F
測資這個你隨便寫都很可以吧

11/10 03:06, 4年前 , 5F
當年刻紅黑只知道自己丟隨機以及助教
11/10 03:06, 5F

11/10 03:06, 4年前 , 6F
給的測資沒問題
11/10 03:06, 6F

11/10 03:11, 4年前 , 7F
那不就OrderedDict = =
11/10 03:11, 7F
不是,ordered dictionary 是會保留「插進來的順序」, 這個在Java 的對應是 LinkedHashMap 我現在是要一個能對key排序的map,也就是我插入 (3,2) (1,3) (2,5), 依序丟出來的entry pairs 會是 (1,3) (2,5) (3,2)

11/10 03:12, 4年前 , 8F
改用 Jython 呀
11/10 03:12, 8F

11/10 03:16, 4年前 , 9F
可是如果是這個排序的話,內建的dic
11/10 03:16, 9F

11/10 03:16, 4年前 , 10F
t本來就是照這樣排序啊
11/10 03:16, 10F

11/10 03:24, 4年前 , 11F
不知道,我資結做的時候是byC
11/10 03:24, 11F

11/10 03:30, 4年前 , 12F
C++有 改用C++
11/10 03:30, 12F

11/10 03:35, 4年前 , 13F
[(k,dic[k]) for k in sorted(dic.key
11/10 03:35, 13F

11/10 03:36, 4年前 , 14F
())] 這樣?
11/10 03:36, 14F

11/10 03:42, 4年前 , 15F
我以為pandas能支援?
11/10 03:42, 15F

11/10 03:42, 4年前 , 16F
不會去stackoverflow問喔
11/10 03:42, 16F

11/10 03:45, 4年前 , 17F
sorted map應該插入就會排序了吧 你那
11/10 03:45, 17F

11/10 03:45, 4年前 , 18F
個ordereddict還要先sort不太一樣
11/10 03:45, 18F

11/10 03:46, 4年前 , 19F
所以你是要插入資料時就排好,還是全
11/10 03:46, 19F

11/10 03:46, 4年前 , 20F
部資料放進來再排?
11/10 03:46, 20F

11/10 03:48, 4年前 , 21F
我看java那個是每次插入都要比
11/10 03:48, 21F

11/10 03:50, 4年前 , 22F
如果每次插入都要比,那你在py可以每
11/10 03:50, 22F

11/10 03:50, 4年前 , 23F
次插入都sort啊?
11/10 03:50, 23F

11/10 03:59, 4年前 , 24F
八卦版臥虎藏龍
11/10 03:59, 24F

11/10 04:02, 4年前 , 25F
要看你時間複雜度啊==
11/10 04:02, 25F

11/10 04:06, 4年前 , 26F
那這樣講的話python預設的dict不就
11/10 04:06, 26F

11/10 04:06, 4年前 , 27F
是sorted map了嗎
11/10 04:06, 27F

11/10 04:08, 4年前 , 28F
不管你照什麼順序塞,裡面都是由小
11/10 04:08, 28F

11/10 04:08, 4年前 , 29F
到大這樣排啊
11/10 04:08, 29F
不是 = = 你可以跑跑看下面這個: x = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) for i in x.keys(): print(i) 他印出來的東西絕對不是按照順序

11/10 04:33, 4年前 , 30F
每次插入都排是三小 不要寫糞扣好嗎
11/10 04:33, 30F

11/10 04:46, 4年前 , 31F
每個工具想解決的問題不同
11/10 04:46, 31F

11/10 04:48, 4年前 , 32F
沒放在 lib 又不願意 pip 又不想自幹
11/10 04:48, 32F

11/10 04:49, 4年前 , 33F
那可能你的情境不適合用 python
11/10 04:49, 33F

11/10 04:51, 4年前 , 34F
*stdlib
11/10 04:51, 34F

11/10 05:50, 4年前 , 35F
我好像知道你問題在哪了,我猜你現
11/10 05:50, 35F

11/10 05:50, 4年前 , 36F
在是用python3吧你試試用python2就
11/10 05:50, 36F

11/10 05:50, 4年前 , 37F
知道這不是個問題了
11/10 05:50, 37F
https://repl.it/languages/python Python 2.7.16 x = dict([('sape', 4139), ('guid', 4127), ('aack', 4098)]) for i in x.keys(): print(i) Output: aack sape guid 他如果built-in map 是sorted map 那問題更大

11/10 06:08, 4年前 , 38F
自己寫很難嗎?
11/10 06:08, 38F

11/10 06:12, 4年前 , 39F
C++歡迎你
11/10 06:12, 39F

11/10 06:14, 4年前 , 40F
說老實話這種功能應該要內建可以call
11/10 06:14, 40F

11/10 06:15, 4年前 , 41F
又不是多客製化的fun.
11/10 06:15, 41F

11/10 06:16, 4年前 , 42F
不過像 C++ 除了極少情形大部分都是
11/10 06:16, 42F

11/10 06:16, 4年前 , 43F
用 unordered_map , 多了 map 反而
11/10 06:16, 43F

11/10 06:16, 4年前 , 44F
讓很多初學者誤用
11/10 06:16, 44F

11/10 06:20, 4年前 , 45F
但就是啊?有什麼問題嗎?
11/10 06:20, 45F
不是啊 output 結果是 aack sape guid 這怎麼會是sorted 的結果? Python 2.7.17 Documentation 裡面寫得很明白: "The keys() method of a dictionary object returns a list of all the keys used in the dictionary, in arbitrary order (if you want it sorted, just apply the sorted() function to it)." Link: https://docs.python.org/2/tutorial/datastructures.html

11/10 06:40, 4年前 , 46F
回wuy大, 不夠日常的功能都不會內建
11/10 06:40, 46F

11/10 06:40, 4年前 , 47F
日常 -> 內建, 常用 -> stdlib
11/10 06:40, 47F

11/10 06:40, 4年前 , 48F
偶爾 -> pip
11/10 06:40, 48F

11/10 06:54, 4年前 , 49F
.keys()抓出來sort key, 用[]取value
11/10 06:54, 49F

11/10 06:54, 4年前 , 50F
由於[]的O(n)是常數 所以效能是sort的
11/10 06:54, 50F

11/10 06:55, 4年前 , 51F
O(nLogn)
11/10 06:55, 51F

11/10 06:57, 4年前 , 52F
可以用sortedcontainers的SortedDict
11/10 06:57, 52F

11/10 06:58, 4年前 , 53F
如果不是用Anaconda要pip就是了
11/10 06:58, 53F
這個sortedcontainers算是一統天下了嗎? 我是裝大蟒蛇沒錯

11/10 07:05, 4年前 , 54F
Key值排序在java是treemap吧?
11/10 07:05, 54F
是的

11/10 07:20, 4年前 , 55F
kotlin>>>>>Java
11/10 07:20, 55F

11/10 07:58, 4年前 , 56F
11/10 07:58, 56F

11/10 09:18, 4年前 , 57F
效能
11/10 09:18, 57F

11/10 09:52, 4年前 , 58F
Pandas 做得到你描述的功能吧
11/10 09:52, 58F

11/10 10:06, 4年前 , 59F
小知識 linkedhashmap = ordereddict
11/10 10:06, 59F

11/10 10:20, 4年前 , 60F
OrderedDict哪是插入順序啊,虎爛
11/10 10:20, 60F
https://www.geeksforgeeks.org/ordereddict-in-python/ The only difference between dict() and OrderedDict() is that: OrderedDict preserves the order in which the keys are inserted.

11/10 10:27, 4年前 , 61F
你可以考慮還不錯的 Clojure
11/10 10:27, 61F

11/10 10:32, 4年前 , 62F
Python就是邪魔歪道,還這麼多人用
11/10 10:32, 62F
※ 編輯: arrenwu (71.198.27.180 美國), 11/10/2019 11:53:32

11/10 13:03, 4年前 , 63F
就是啊 用python去面試就怕卡在這個點上
11/10 13:03, 63F

11/10 15:33, 4年前 , 64F
你不會寫一個,可憐
11/10 15:33, 64F
文章代碼(AID): #1TnmpOjW (Gossiping)