0

これで私を助けてくれませんか、私はPythonを初めて使用します、ここにいくつかのデータを含むリストがあります

data_list=[[], [247L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2011, 9, 14, 7, 55, 1)],  [247L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2011, 9, 1, 11, 59)], [247L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2012, 3, 1, 11, 59)],  [247L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2012, 4, 29, 22, 54, 11)], [248L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2012, 3, 1, 11, 59)], [254L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2012, 3, 1, 11, 59)], [258L, datetime.datetime(2011, 4, 7, 0, 0)], [259L, datetime.datetime(2011, 4, 7, 0, 0), datetime.datetime(2011, 9, 14, 7, 55, 1)], [259L, datetime.datetime(2011, 5, 7, 0, 0), datetime.datetime(2012, 3, 1, 11, 59)]]

ここで、247、248 ..は一意のIDです。以下のような日付を辞書に抽出したいのですが、

data_dict={247:('2011-4-7','2011-9-1'),248:('2011-4-7','2012-3-1'),254:('2011-4-7','2012-3-1'),258:('2011-4-7', '2011-9-14'), 259:('2011-5-7','2011-9-14')}

この辞書を次のような結果を返す関数に送信します。147は2つの日付の間の日数を示します

data_count={247:'147',248:'329',254:'329',258:'0',259:'130'}

日数を数えるための小さなコードを書きましたが、関数を介して送信する方法がわかりません

a='2011-5-7'  
b='2011-9-14'   
date_format = "%Y-%m-%d"  
a=datetime.strptime(a, date_format)  
b = datetime.strptime(b, date_format)   
delta = b - a   
print delta.days

これは正しいです

  class a:
     def __init__(self):

     def datedifference(self,a, b):
       self.date_format = "%Y-%m-%d"
       return (datetime.strptime(b, self.date_format) -datetime.strptime(a,              self.date_format)).days  


  def main():
      data_dict={247:('2011-4-7','2011-9-1'),248:('2011-4-7','2012-3-1'),254: ('2011-4-7','2012-3-1'),258:('2011-4-7',)259:('2011-5-7','2011-9-14')} 
      ob=a()
      {k: ob.datedifference(v[0],v[1]) for k, v in data_dict.iteritems()}  
4

1 に答える 1

2

その関数を作るのは簡単です:

def datedifference(a, b):
    date_format = "%Y-%m-%d"
    return (datetime.strptime(b, date_format) - datetime.strptime(a, date_format)).days

それをあなたに適用することdata_dictもそれほど難しいことではありません:

{k: datedifference(*v) for k, v in data_dict.iteritems()}

これにより、(修復されたdata_dict入力サンプルを使用して)次のようになります。

>>> {k: datedifference(*v) for k, v in data_dict.iteritems()}                                                               {248: 329, 258: 160, 259: 130, 254: 329, 247: 147}

これ、データポイントごとに2つの日付があることを前提としています。1しか持っていない場合は、より少ない日付でテストするように関数を調整する必要があります。

そもそも生成するdata_dictには:

data_dict = {}

for row in data_list:
    if not row: continue
    key, dates = row[0], row[1:]
    if key in data_dict: continue  # already in there
    data_dict[key] = tuple(map(datetime.date.isoformat, dates))

これは以下を生成します:

{248L: ('2011-04-07', '2012-03-01'), 258L: ('2011-04-07',), 259L: ('2011-04-07', '2011-09-14'), 254L: ('2011-04-07', '2012-03-01'), 247L: ('2011-04-07', '2011-09-14')}
于 2013-03-26T10:24:20.117 に答える