我有一套套装的默认设置,我需要在最终输出期间很好地对齐列
每组都通过",".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'])})
答案 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
。