2010-12-01 100 views
2

有沒有辦法快速查詢字典對象以查找含有大多數字的鍵(所有鍵都是字符串類型)?Python - 在字典中查找最長(大多數字)鍵

也就是說,如果最大鍵的項目有五個單詞{'這是最大的鍵':3},我怎麼能夠快速查詢字典並返回int'5'?

最佳, 喬治娜

+0

它是否需要是int,或者密鑰本身是否可以接受? – 2010-12-01 04:23:34

+0

什麼時候有領帶? – JAL 2010-12-01 04:31:55

+0

鑑於你接受的答案,我一定誤解了你的問題的意圖。但是,我堅持認爲,如果您發現需要經常這樣做,那麼您選擇的數據結構很差。 – jtdubs 2010-12-01 04:45:28

回答

1

最大的 - 每個關鍵詞的次數:

max(len(k.split()) for k in d.keys()) 
-1

沒有捷徑。簡單的方法:

import re 
max([len(re.split('\s+', k)) for k in d.keys()]) 
+0

哇 - 謝謝!那很完美! – Georgina 2010-12-01 04:27:18

2

這會給你的關鍵:

max(d, key=lambda x: len(x.split())) 

如果你想要的大小:

max(len(x.split()) for x in d) 
1
longest=max(d.keys(), key=lambda s:len(s.split())) 
len(longest.split()) 
0
max(len(i.split()) for i in d.iterkeys()) 
0

答案是否定的。

如果您想知道是否有快速輸入的解決方案,那麼當然,請查看其他答覆。但是他們中的任何一個都不會在大型字典上快速運行,我相信這是您問題的精神所在。

如果這確實是您需要經常做的事情,您應該修改代碼中的添加和刪除字典中的鍵的點,以便它們還保留一堆鍵,按字數排序。

0

如果你能保證...

  • 沒有前導或尾隨空格
  • 字正好一個空格分隔

計數

max(key.count(' ') for key in d) + 1 
  • 幾乎分配零個新對象,一個iter和一些整數
  • 這使用較少的內存,幾乎是使用split的兩倍。

如果你不能....

拆分

max(len(key.split()) for key in d) 
  • 儘管1/2的快速接受正規鑰匙值作爲計數方法,它不慢。