2013-03-03 25 views
-2

我有一個有序字典像以下:插入號碼列表

source =([('a',[1,2,3,4,5,6,7,11,13,17]),('b',[1,2,3,12])]) 

我首先要計算每個鍵的值的長度,然後計算它的sqrt,說它是大號

插入L到可以無餘數分開的位置並在其他數字之後插入「1」。

例如,source['a'] = [1,2,3,4,5,6,7,11,13,17]它的長度是9 因此SQRT的len(source['a'])是3.

在其可以恰好通過3(例如,3位被劃分的位置,位置6,位置插入號碼3 9)如果數字的位置不能完全按3分割,則在其後面插入1。

要得到的結果類似folloing:

result=([('a',["1,1","2,1","3,3","4,1","5,1","6,3","7,1","11,1","13,3","10,1"]),('b',["1,1","2,2","3,1","12,2"])] 

我不知道如何在列表中更改項目爲一個字符串對。順便說一句,這不是我的家庭作業,我試圖建立一個布爾型迴歸引擎,源數據太大,所以我只是在這裏創建了一個簡單的示例來解釋我想要達到的目標:)

+0

如果這是一個標準的Python字典,那麼它不是有序的。你需要使用collections.OrderedDict(也許你會這樣做)。 – uselpa 2013-03-03 08:43:24

+0

向我們展示您所嘗試的或您認爲可能解決問題的方法總是一個好主意,即使完全錯誤。 – Kev 2013-03-03 16:43:49

回答

2

因爲這似乎作爲一個功課,我會盡力幫助你與你面臨的問題部分

我不知道如何將列表中的項目更改爲字符串對。

由於整個列表需要更新,它能夠更好地重建它,而不是更新的地方,雖然它可能是列表是可變的

考慮名單

lst = [1,2,3,4,5] 

轉換它可以使用列表理解

lst = [str(e) for e in lst] 

您也可以使用內置的map作爲map(str,lst),但你需要記住比Py3。X,地圖返回地圖對象,因此需要進行相應的處理

條件的理解是最好的表達爲條件語句

<TRUE-STATEMENT> if <condition> else <FALSE-STATEMENT> 

要得到任何項目的索引列表中,你最好的辦法是使用內置的enumerate

如果你需要創建一個項目序列的格式化字符串表達式,它建議使用format string specifier

"{},{}".format(a,b) 

包括list任何序列的長度可以通過將計算出的內置len

可以使用操作者**具有分數功率或使用math模塊並調用sqrt函數來計算平方根

現在你只需要結合上面的每個建議來解決你的問題。