1

我需要将python中的日期分解为:年、月、日和时间(小时)。

我有一个对象列表,每个对象都有一个日期属性:

startDate=db.DateTimeProperty(auto_now_add=True)

date 属性包含年、月、日和时间。

我希望创建一个新的嵌套列表(字典),其中:

外部列表- 是一个年份列表(至少存在一个输入日期)-> 每年内部是一个月份列表(该年至少存在一个输入日期)-> 在此内部天(与月份相同 - 输入列表中存在的天数)-> 在其中一个时间列表(小时)......每个我们指向它的各自对象。

我希望这很容易理解。

如果我得到下面的列表作为输入:

{obj1 -> (2000 Dec 18 9:00AM), obj2 -> (2000 Dec 19 1:00PM)}

它会把它们夹在一起,所以我会有

(2000) -> (Dec) -> {(18) -> (9:00AM) -> obj1 ,(19) -> (1:00PM) -> obj2}

我希望这是有道理的..

基本上我有很多带有日期的事件,我想像这样列出它们:

Year ->
Month(s) of interest->
Day(s) of interest->
(event times)
.
.
.

Another Year ->
Relevant Month(s) ->
Relevant Day(s) ->
(event times)
.
.
.

代替:

(Event1 : complete date & time) , (Event2 : complete date & time) , (event3 : complete date & time)

谢谢

4

2 回答 2

1
class a: ## Using this class just to explain
    def __init__(self,y,m,d,t):
        self.y=y
        self.m=m
        self.d=d
        self.t=t


o1 = a(2000,12,18,9) ## Just assuming integers here. you can choose immutable objects here
o2 = a(2000,12,19,13)
o3 = a(2001,11,18,9)
o4 = a(2000,11,18,6)
o5 = a(2000,12,6,7)

l=[o1,o2,o3,o4,o5]


d={}

for o in l:
    if o.y not in d:
        d[o.y] = {}
    # print d
    if o.m not in d[o.y]:
        d[o.y][o.m]={}
    if o.d not in d[o.y][o.m]:
        d[o.y][o.m][o.d]={}
    if o.t not in d[o.y][o.m][o.d]:
        d[o.y][o.m][o.d][o.t]=o

您可以尝试生成格式更好的输出:

for k,v in d.items():
    for j,h in v.items():
        print k,j,h

我得到的输出为:

2000 11 {18: {6: <__main__.a instance at 0x0232E9E0>}}
2000 12 {18: {9: <__main__.a instance at 0x0232E940>}, 19: {13: <__main__.a instance at 0x0232E990>}, 6: {7: <__main__.a instance at 0x0232EA08>}}
2001 11 {18: {9: <__main__.a instance at 0x0232E9B8>}}
于 2012-09-05T16:57:38.197 回答
0
ytree = {}
for obj in objects :
  dt = obj.time_field
  year = dt.year
  month = dt.month
  day = dt.day
  hour = dt.hour

  if not ytree.get(year):
    ytree[year] = {}
  if not ytree[year].get(month):
    ytree[year][month] = {}
  if not ytree[year][month].get(day):
    ytree[year][month][day] = {}
  if not ytree[year][month][day].get(hour):
    ytree[year][month][day][hour] = []
  ytree[year][month][day][hour].append(obj.event_name)
于 2012-09-05T16:59:41.897 回答