Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python字典和示例数据集_Python_Datetime_Python 2.7 - Fatal编程技术网

python字典和示例数据集

python字典和示例数据集,python,datetime,python-2.7,Python,Datetime,Python 2.7,你能在这方面帮助我吗,我是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(2

你能在这方面帮助我吗,我是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)]]
其中247248。。都是唯一的身份,我想把下面的日期提取到字典里

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表示两个日期之间的天数

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()}  

使其成为一个功能很容易:

def datedifference(a, b):
    date_format = "%Y-%m-%d"
    return (datetime.strptime(b, date_format) - datetime.strptime(a, date_format)).days
将其应用到您的
数据上也不难:

{k: datedifference(*v) for k, v in data_dict.iteritems()}
这将给出(使用修复后的
数据dict
输入样本):

假设每个数据点有2个日期;如果只有tup 1,则需要调整函数以测试更少的日期

要首先生成数据,请执行以下操作:

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')}

你已经有了代码,把它变成一个函数是很简单的。您正在努力解决的是哪一部分?您的
数据列表中存在重复条目
;合并它们的规则是什么?保留哪些日期,最小和最大日期?是的,因此跳过所有重复的日期。我只有数据列表,我们如何提取数据列表数据以获得数据输出_dict@user9986:您执行了从datetime导入datetime的
。改为导入日期时间。@user9986:您缺少一个逗号。我已经在您的帖子中更正了这个错误。@user9986:如果您有一个新问题,请在堆栈溢出上作为一个新的、单独的问题发布。编辑我的答案不适合。
{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')}