循环遍历字典中嵌入的列表中的所有项目

时间:2015-01-19 19:05:53

标签: python list python-2.7 dictionary list-comprehension

我在字典中的列表列表中以字符串形式显示日期。我写了一个函数来将日期字符串转换为日期时间。我想将字典中的所有字符串日期转换为日期时间。我的代码只转换每个表中的第一个子列表,而无法获取其他表。最好的方法是什么?

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]]

2 个答案:

答案 0 :(得分:1)

这是一个正确扩展嵌套列表的问题:

for key in My_Dict:
    for data in My_Dict[key]["Dates"]:
        for date in data:
            print date, parse_date(date)

给出:

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

要将其放入单个平面列表中,您可以执行以下操作:

print [parse_date(date) for key in My_Dict for data in My_Dict[key]["Dates"] for date in data]

但我认为这三个循环更容易阅读!

答案 1 :(得分:1)

将列表理解嵌套为

print [[parse_date(x) for x in i] for i in My_Dict[tbl]['Dates']]

但是如果你想要一个平面列表,那么你可以尝试提到Hooke,即

print [parse_date(date) for key in My_Dict for data in My_Dict[key]["Dates"] for date in data]