python修改字符串插入dict

时间:2013-05-31 16:49:51

标签: python performance list dictionary

我打开.txt文件和readlines

.txt contents = html_log:Bob -1.2 -0.25 4:53 1 0:02 2 1 3 html_log:John 26.6 0.74 36:00 -4 3 25 26 1:57 74 12 16 -1.11 html_log:Bob -1.2 -0.25 4:53 1 0:04 2 1 3 

change = str(textfile)

pattern2 = re.compile("html_log:(?P<name>[^ ]*)(?: [^\s]+){4} (?P<score>[^ ]*)")

try:
    mylist2=sorted(pattern2.findall(change), key=lambda x: float(x[1]), reverse=True)
except ValueError:
    mylist2=sorted(pattern2.findall(change), key=lambda x: float('0'), reverse=True)

产生

mystr = ('Bob', '0:02'), ('John', '3'),('Bob', '0:02')

我要做的是找出该值是否不是有效的int ie。 0:02,如果没有用0替换它。

我想要得到一个结果:

('Bob', '0'), ('John', '3')

我试图将[k]和[v]放入我的dict并添加[v]的值,但因为无数字而无法正常工作。

mic = defaultdict(int)

for k,v in mylist2:
    mic[k] += re.sub(' ^\d*:\d*','0',v)

没用。并产生typeerror

Traceback (most recent call last):
  File "C:/Python26/myfile.py", line 44, in <module>
    mic[k] += re.sub(' ^\d*:\d*','0',v)
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

1 个答案:

答案 0 :(得分:2)

您可以使用try...except子句来清除非整数:

def makeInt(val, default=0):
    try: 
        return int(val)
    except ValueError:
        return default

然后,您可以使用以下内容替换此行mic[k] += re.sub(' ^\d*:\d*','0',v)

mic[k] += makeInt(v)

编辑:如果您想使用0以外的值来替换非整数,只需将其添加为另一个参数:

mic[k] += makeInt(v, 1)