Loop through all items in a list of list embedded in dictionary
我在字典的列表中有字符串形式的日期。我编写了一个函数来将日期字符串转换为日期时间。我想将字典中的所有字符串日期转换为日期时间。我的代码只转换每个表中的第一个子列表,它无法获取其他子列表。最好的方法是什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import datetime def parse_date(datestamp): try: return datetime.datetime.strptime(str(datestamp)[:10], '%Y-%m-%d') except ValueError: pass My_Dict = { 'Value1': {'Dates' : [['2014-10-14', 10, '2014-10-13', '2014-11-03'], ['2014-10-14', '2014-10-14', '2014-11-03']]}, 'Value2': {'Dates' : [['2014-10-14', '2014-10-13', '2014-11-03'], ['2014-10-14', '2014-10-14', '2014-11-03']]}, } for tbl in My_Dict: print [parse_date(x) for x in My_Dict[tbl]['Dates'][0]] |
把你的清单理解嵌套为
1 | print [[parse_date(x) for x in i] for i in My_Dict[tbl]['Dates']] |
。
但是如果你想要一个简单的列表,那么你可以像胡克提到的那样尝试,那就是
1 | print [parse_date(date) for key in My_Dict for data in My_Dict[key]["Dates"] for date in data] |
正确展开嵌套列表的问题是:
1 2 3 4 | for key in My_Dict: for data in My_Dict[key]["Dates"]: for date in data: print date, parse_date(date) |
给予:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 2014-10-14 2014-10-14 00:00:00 2014-10-13 2014-10-13 00:00:00 2014-11-03 2014-11-03 00:00:00 2014-10-14 2014-10-14 00:00:00 2014-10-14 2014-10-14 00:00:00 2014-11-03 2014-11-03 00:00:00 2014-10-14 2014-10-14 00:00:00 10 None 2014-10-13 2014-10-13 00:00:00 2014-11-03 2014-11-03 00:00:00 2014-10-14 2014-10-14 00:00:00 2014-10-14 2014-10-14 00:00:00 2014-11-03 2014-11-03 00:00:00 |
号
要将其放入一个简单的列表中,您可以执行以下操作:
1 | print [parse_date(date) for key in My_Dict for data in My_Dict[key]["Dates"] for date in data] |
但我认为这三个循环更容易阅读!