将字符串附加到字符串列表

时间:2014-01-28 05:33:56

标签: python list

import re
red_dict= {u'Jharkhand': ['jarka09', 'jarka05'],
 u'Karnataka': ['karnataka2013', 'karnatka2008']}
for key, value in red_dict.items():
    num = re.findall(r'\d+',' '.join(value))
    map(lambda x: x if len(x)==4 else '20'+x, num)
    print num

获得结果

['09', '05']
['2013', '2008']

为什么两位数列表项中没有附加'20'?

对于普通用途,我可以验证这种方法是否有效

l = ['a','b','cd']
map(lambda x:x if len(x)==2 else 'e'+x,l)

给出

['ea', 'eb', 'cd']

2 个答案:

答案 0 :(得分:4)

@fattru的答案可能会解决您的问题,但只有格式良好的regex才能在没有使用map的任何后期处理的情况下完成您的工作

<强>实施

for key, value in red_dict.items():
    print [re.sub("^[^\d]+20|[^\d]+", "20", v) for v in value]

<强>演示

['2009', '2005']
['2013', '2008']

注意

对于您的特定情况,您实际上甚至不需要正则表达式。您可以简单地将结尾的两个字符分开并将其附加到'20'

for key, value in red_dict.items():
    print ['20' + v[-2:] for v in value]

答案 1 :(得分:2)

map不会替换给定的num。您应该将返回值分配回num

>>> a = [1, 2, 3]
>>> map(lambda x: x + 1, a)
[2, 3, 4]
>>> a
[1, 2, 3]
>>> a = map(lambda x: x + 1, a)
>>> a
[2, 3, 4]

num = map(lambda x: x if len(x)==4 else '20'+x, num)
#^^^^