集合词典中最长的集合

时间:2014-12-21 11:00:45

标签: python dictionary

我有一套套装的默认设置,我需要在最终输出期间很好地对齐列 每组都通过",".join(setdict[key])显示,以避免丑陋的支撑 我想知道是否有更有效率和Pythonic方式用逗号分析最长的字符串字符串
我目前的实施是

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

我的dict的真实例子:

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

2 个答案:

答案 0 :(得分: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())

答案 1 :(得分:0)

关于值的

map str.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