2014-12-21 32 views
0

我有一個套一個defaultdict字典,我需要最終輸出
每一組通過",".join(setdict[key])顯示,以避免難看的牙套
我想知道在很好地對齊列中有更高效更Python辦法calc下最長集合的用逗號
串 我目前的實現是最長集合以成套

def GetSetLen(setdict): 
    maxset = 0 
    for k,v in setdict.iteritems(): 
     maxset = max(maxset, (len(",".join(setdict[k])))) 
    return maxset 

我的字典的真實的例子:

defaultdict(<type 'set'>, {'2235788': set(['604', '2415919103', '7']), '3674877': set(['604', '2415919103', '7'])}) 
+0

請顯示您的數據樣本,這看起來不是一個很好的方法來獲得一個集合的長度,並可能包含錯誤 – jamylak

+0

這個腳本是一些應用程序的日誌分析器。我通過日誌執行搜索並找到每個ID的ID和錯誤的映射。所以你可以假設我有一個ID和列表(實際上是設置的,因爲日誌可能包含錯誤的重複)的錯誤。最後,我需要輸出ID的列,assosiated錯誤的列和其他一些colmns –

+0

我只是說,這個網站要求你創建一個簡單的例子,即使是樣本值,你的'setdict'看起來像,所以問題是自我包含 – jamylak

回答

1

使用dict.itervalues,因爲代碼不考慮密鑰。而且您不需要製作一個臨時字符串來計算連接字符串的長度。上數值

if not setdict: 
    return 0 # max(empty_setdict) raise a `ValueError` 
return max(sum(map(len, v)) + len(v) - 1 if v else 0 
      for v in setdict.itervalues()) 
+0

用'str(v)'或'map(lambda v:len(str(v))...)'來解釋'__str__'變化會不會更好? –

+1

@ReutSharabani,OP使用'','。join';這意味着集合的元素已經是字符串。 – falsetru

+0

它的工作原理和我接受它,但你可以再補充一些詞來解釋它是如何工作的,因爲我只學了一週Python,但對我而言並不清楚。謝謝 –

0

mapstr.join,然後映射對所得串len,然後找到max

>>> 
>>> d 
defaultdict(<type 'set'>, {'2235788': set(['604', '2415919103', '7']), '654321': ['60004', '2415919103', '765'], '000002': ['', '', ''], '000000': [''], '3674877': set(['604', '2415919103', '7']), '123456': ['604', '2415919103', '765']}) 
>>> map(len, map(','.join, d.itervalues())) 
[16, 20, 2, 0, 16, 18] 
>>> max(map(len, map(','.join, d.itervalues()))) 
20 
>>> 

你可以使用itertools.imap如果你不想創建中間的列表。