<p><strong>问题</strong></p>
<p>为了澄清这个问题,从预期的代码来看,您似乎希望将每个子列表的索引1处的日期字符串替换为:</p>
<ol>
<li>按时间排序日期</li>
<li>根据翻译词典缩写月份</li>
</ol>
<p>可按以下步骤进行:</p>
<pre><code># Given
import datetime
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]
]
TRANSLATE = {
"January": "Ian", "February": "Feb", "March": "Mar", "April": "Apr",
"May": "Mai", "June": "Iun", "July": "Iul", "August": "Aug",
"September": "Sept", "October": "Oct", "November": "Nov", "December": "Dec"
}
</code></pre>
<p><strong>代码</strong></p>
<pre><code>def transform_dates(iterable, translate=TRANSLATE):
transformed_lists = []
for i, sublst in enumerate(iterable):
transformed_lists.append(sublst[:])
# Clean dates string
raw_dates = sublst[1]
cleaned_dates = set(map(str.strip, raw_dates.split(",")))
# Sort dates string
months_yrs = sorted(cleaned_dates, key=lambda x: datetime.datetime.strptime(x, "%B %Y"))
months_yrs_split = [i.split() for i in months_yrs]
# Abbreviate months
abbrev_dates = [" ".join((translate[i[0]], i[1])) for i in months_yrs_split]
transformed_lists[i][1] = ", ".join(abbrev_dates)
return transformed_lists
transform_dates(mylist)
# [[1890731350060, 'Ian 2016, Feb 2016, Mar 2016', 'INDEMNIZATIA DE HRANA',1183],
# [1890922350110, 'Apr 2015, Mai 2015, Iun 2015', 'INDEMNIZATIA DE HRANA',1183],
# [1890731350060, 'Ian 2016, Feb 2016, Mar 2016', 'INDEMNIZATIA DE HRANA',1183]]
</code></pre>
<hr/>
<p><strong>注意事项</p>
<p>此函数按月份和年份排序。你知道吗</p>
<pre><code>lst = [1890731350060, 'February 2015, March 2013, January 2016', 'INDEMNIZATIA DE HRANA', 1183],
transform_dates(lst)
# [[1890731350060, 'Mar 2013, Feb 2015, Ian 2016', 'INDEMNIZATIA DE HRANA', 1183]]
</code></pre>
<p>此函数用于删除重复的日期。你知道吗</p>
<pre><code>lst = [1890731350060, 'May 2016, June 2016, May 2016, July 2016', 'INDEMNIZATIA DE HRANA', 1183],
transform_dates(lst)
# [[1890731350060,'Mai 2016, Iun 2016, Iul 2016', 'INDEMNIZATIA DE HRANA', 1183]]
</code></pre>
<p><strong>细节</strong></p>
<p>如果您是Python新手,我将添加这些细节来帮助您表达正在发生的事情。你知道吗</p>
<p><code>transform_dates()</code>函数接受名为<code>mylist</code>的列表列表作为and参数。在函数内部,我们首先创建一个名为<code>transformed_lists</code>的新列表,稍后将向其追加项。我们现在循环<code>iterable</code>(相当于<code>mylist</code>)以获得每个<code>sublist</code>,并跟踪它们的索引位置(<code>i</code>)。你知道吗</p>
<p>我们将<code>sublst</code>的一个副本添加到<code>transform_dates</code>(因此<code>[:]</code>,因为这样可以防止我们修改<code>mylist</code>中的原始项)。然后我们开始处理包含日期字符串的第一个索引。我们清理字符串,首先将其拆分为一个月-年对列表,然后<code>strip</code>尾随和前导空格,例如<code>['February 2016', 'March 2016', 'January 2016']</code>。如果有任何重复的日期,<code>set()</code>会删除它们,因为集合是唯一元素的集合。你知道吗</p>
<p>为了准备下一步,我们利用这个机会将它们按日期和<code>split</code>按单个空格进一步排序。拆分生成一个临时嵌套列表,例如<code>[['January', '2016'], ['February', '2016'], ['March', '2016']]</code>。你知道吗</p>
<p>最后,对于后一个嵌套列表中的每个项目,我们使用<code>TRANSLATE</code>字典缩写月份,并将其与年份一起<code>join()</code>,形成一个新字符串的单一列表,例如<code>['Jan 2016', 'Feb 2016', 'Mar 2016']</code>。然后我们执行最后一个<code>join()</code>,其中每个项由逗号分隔(根据请求),例如<code>'Jan 2016, Feb 2016, Mar 2016'</code>。你知道吗</p>
<p>我们已经完成了弦的变换。现在我们只需将新字符串赋给<code>transformed_lists</code>的索引1来替换旧字符串。总之,我们系统地选择了字符串,对其进行分解、转换、重新组合并将其重新分配到列表中的原始位置。我们对<code>iterable</code>中的每个<code>sublist</code>重复这个过程,直到循环完成。结果是我们的<code>transformed_lists</code>,它是由函数返回的。你知道吗</p>