我有这个清单:
mylist = [
[1890731350060, 'February 2016, March 2016, January 2016', 'INDEMNIZATIA DE HRANA', 1183],
[1890922350110, 'May 2015, June 2015, April 2015', 'INDEMNIZATIA DE HRANA', 1183],
[1890731350060, 'February 2016, March 2016, January 2016', 'INDEMNIZATIA DE HRANA', 1183]
]
我想要的结果是:
mylist = [
[1890731350060, 'Ian 2016, Feb 2016, Mar 2016', 'INDEMNIZATIA DE HRANA', 1183],
[1890922350110, 'Iun 2016, Mai 2016, Apr 2016', 'INDEMNIZATIA DE HRANA', 1183],
[1890731350060, 'Ian 2016, Feb 2016, Mar 2016', 'INDEMNIZATIA DE HRANA', 1183]
]
为此,我有两个函数:
from datetime import datetime
import re
def translateInRo(string, dyct):
substrs = sorted(dyct, key=len, reverse=True)
regexp = re.compile('|'.join(map(re.escape, substrs)))
return regexp.sub(lambda match: dyct[match.group(0)], string)
def orderDateslist(thislist):
i=0
for dates in thislist:
sorted_list = []
chgDates = dates[1].split(",")
for test1 in chgDates:
sorted_list.append(test1.strip())
test = sorted(sorted_list, key=lambda x: datetime.strptime(x, "%B %Y"))
str1 = ', '.join(test)
translate = translateInRo(
str1, {"January": "Ian", "February": "Feb", "March": "Mar", "April": "Apr", "May": "Mai", "June": "Iun", "July": "Iul", "August": "Aug", "September": "Sept", "October": "Oct", "November": "Nov", "December": "Dec"})
thislist[i][1] = translate
i = + 1
return thislist
当我打印时:
print (orderDateslist(mylist))
[[1890731350060, 'Ian 2016, Feb 2016, Mar 2016', 'INDEMNIZATIA DE HRANA', 1183], [1890922350110, 'Ian 2016, Feb 2016, Mar 2016', 'INDEMNIZATIA DE HRANA', 1183], [1890731350060, 'February 2016, March 2016, January 2016', 'INDEMNIZATIA DE HRANA', 1183]]
最后一个列表不会被计算,我的函数只适用于列表列表中的前两个列表,之后的列表将保持不变,我希望这个函数适用于大量列表,我必须更改什么?我用的是python3。最后一个是复制。你知道吗
问题
为了澄清这个问题,从预期的代码来看,您似乎希望将每个子列表的索引1处的日期字符串替换为:
可按以下步骤进行:
代码
注意事项
此函数按月份和年份排序。你知道吗
此函数用于删除重复的日期。你知道吗
细节
如果您是Python新手,我将添加这些细节来帮助您表达正在发生的事情。你知道吗
transform_dates()
函数接受名为mylist
的列表列表作为and参数。在函数内部,我们首先创建一个名为transformed_lists
的新列表,稍后将向其追加项。我们现在循环iterable
(相当于mylist
)以获得每个sublist
,并跟踪它们的索引位置(i
)。你知道吗我们将
sublst
的一个副本添加到transform_dates
(因此[:]
,因为这样可以防止我们修改mylist
中的原始项)。然后我们开始处理包含日期字符串的第一个索引。我们清理字符串,首先将其拆分为一个月-年对列表,然后strip
尾随和前导空格,例如['February 2016', 'March 2016', 'January 2016']
。如果有任何重复的日期,set()
会删除它们,因为集合是唯一元素的集合。你知道吗为了准备下一步,我们利用这个机会将它们按日期和
split
按单个空格进一步排序。拆分生成一个临时嵌套列表,例如[['January', '2016'], ['February', '2016'], ['March', '2016']]
。你知道吗最后,对于后一个嵌套列表中的每个项目,我们使用
TRANSLATE
字典缩写月份,并将其与年份一起join()
,形成一个新字符串的单一列表,例如['Jan 2016', 'Feb 2016', 'Mar 2016']
。然后我们执行最后一个join()
,其中每个项由逗号分隔(根据请求),例如'Jan 2016, Feb 2016, Mar 2016'
。你知道吗我们已经完成了弦的变换。现在我们只需将新字符串赋给
transformed_lists
的索引1来替换旧字符串。总之,我们系统地选择了字符串,对其进行分解、转换、重新组合并将其重新分配到列表中的原始位置。我们对iterable
中的每个sublist
重复这个过程,直到循环完成。结果是我们的transformed_lists
,它是由函数返回的。你知道吗你可以试试这个:
输出:
相关问题 更多 >
编程相关推荐