Python 替换列表中每个项目的未知第一个字符时,键入错误
我有一个带有短月份名称的数组,如下所示Python 替换列表中每个项目的未知第一个字符时,键入错误,python,Python,我有一个带有短月份名称的数组,如下所示 dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26'] 我想将每个短月份的名称改为月份号,后跟/。 我希望生成的dates_数组如下所示: dates_array = ['1/12', '2/23', '3/24', '4/25', '11/26'] short\u month\u to\u number功能和下面的三行程序出现以下类型错误: TypeError: list in
dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26']
我想将每个短月份的名称改为月份号,后跟/
。
我希望生成的dates_数组如下所示:
dates_array = ['1/12', '2/23', '3/24', '4/25', '11/26']
short\u month\u to\u number
功能和下面的三行程序出现以下类型错误:
TypeError: list indices must be integers or slices, not str
节目如下:
def short_month_to_number (short_month_name):
switcher = {
"Jan": 1,
"Feb": 2,
"Mar": 3,
"Apr": 4,
"May": 5,
"Jun": 6,
"Jul": 7,
"Aug": 8,
"Sep": 9,
"Oct": 10,
"Nov": 11,
"Dec": 12
}
return (switcher.get(short_month_name))
dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26']
dates_array = [dates_array[x].replace(x[:4], short_month_to_number (x[:4])+'/') for x in dates_array]
print (dates_array)
您正在使用[x]索引日期数组,该[x]是日期数组中的字符串。 修复了一些其他索引和类型问题,这将提供所需的输出:
def short_month_to_number (short_month_name):
switcher = {
"Jan": 1,
"Feb": 2,
"Mar": 3,
"Apr": 4,
"May": 5,
"Jun": 6,
"Jul": 7,
"Aug": 8,
"Sep": 9,
"Oct": 10,
"Nov": 11,
"Dec": 12
}
return switcher.get(short_month_name)
dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26']
dates_array = [x.replace(x[:4], str(short_month_to_number(x[:3])) + '/') for x in dates_array]
print (dates_array)
您有多个问题:
x
是来自dates\u数组的项,而不是索引。所以dates\u数组[x]
没有意义
int
(返回值short\u month\u to\u number
)与str连接起来x[:4]
也将包含月份后的空格,您应该使用x[:3]
dates_array = [x.replace(x[:4], str(short_month_to_number(x[:3])) + '/') for x in dates_array]
也就是说,您还可以使用datetime
模块中的日期格式功能:
from datetime import datetime
print([datetime.strptime(d, '%b %d').strftime('%-m/%d') for d in dates_array])
请注意,
%-m
是特定于平台的,在Windows上不可用。如果是这种情况,请使用零填充变量(%m
)。您的解决方案非常有效。谢谢你的详细解释。我错放的第一期。感谢您建议使用日期格式功能,因为我需要将更多的奇数日期格式转换为短格式。您使用datetime格式化函数的想法可能会节省编码时间。我尝试了使用日期格式化函数的代码,但出现以下错误:ValueError:时间数据“1/12”与格式“%b%d”不匹配。您似乎正在向该函数传递一个已转换的日期(1/12
)。您应该传递原始格式(Jan 12
)我传递了原始格式,但收到了另一个错误:ValueError:无效的格式字符串。结果表明,%-m
是特定于平台的,在Windows上不可用。更新了我的答案以反映这一点。