我有这个元组;
Tuple = ( ('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0) ), ('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1) ) )
我想把它改成这样;
Output= ( ('AA', 'BB', '2014-3-2 00:00:00' ), ('CC', 'DD', '2014-3-2 00:00:00' )
每个元组的第三个元素将被转换为表示日期时间的字符串。这可以用类似Tuple[0][2].strftime('%Y-%m-%d %H:%M:%S')
的东西来完成
我遇到的问题是,如何将函数strftime()应用于元组中每个元组的第三个元素?
您必须再次生成元组。你可以通过以下列表理解来做到这一点。
>>> [(a, b, date.strftime('%Y-%m-%d %H:%M:%S')) for (a, b, date) in Tuple]
[('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00')]
如果最终结果需要是一个元组,请使用tuple()
。这个使用了生成器表达式,但基本上是一样的:
>>> tuple((a, b, date.strftime('%Y-%m-%d %H:%M:%S')) for (a, b, date) in Tuple)
(('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00'))
如@msvalkon所述列出理解,或使用map
和lambda
:
In [731]: map(lambda tup: (tup[0], tup[1], tup[2].strftime('%Y-%m-%d %H:%M:%S')), Tuple)
Out[731]: [('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00')]
这里有一个生成器函数可以实现这一功能。
import datetime
def convert_nested(nested_tuples):
for a, b, time in nested_tuples:
yield (a, b, time.strftime('%Y-%m-%d %H:%M:%S'))
if __name__ == '__main__':
nested_tuples = (('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0)),
('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1)))
output = tuple(convert_nested(nested_tuples))
print(output)
或者更简洁地作为生成器理解。
import datetime
if __name__ == '__main__':
nested_tuples = (('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0)),
('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1)))
output = tuple((a, b, time.strftime('%Y-%m-%d %H:%M:%S'))
for a, b, time in nested_tuples)
print(output)