集合中最长的集合

2024-03-28 13:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个defaultdict集合,我需要在最终输出时很好地对齐列
每个集合都通过",".join(setdict[key])显示,以避免使用难看的大括号
我想知道有没有更有效的方法来用逗号计算最长集的字符串
我当前的实现是

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'])})

Tags: 方法key字符串infordef大括号逗号
2条回答

在值上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
>>>

如果不想创建中间列表,可以使用^{}。你知道吗

使用^{},因为代码不考虑键。不需要制作临时字符串来计算连接字符串的长度。你知道吗

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())

相关问题 更多 >