在嵌套字典中添加缺少的键?

时间:2017-12-22 16:00:36

标签: python python-2.7

我有一个字典,用于根据来自数据库的数据构建图表。 我有以下工作代码:

datasets = []

for row in data:
    # add serie if not exists already
    if not any(d['label'] == row['sql_id'] for d in datasets):
        serie = {'label':row['sql_id'],'backgroundColor':GetRandomHexColor(),'data':[]}
        datasets.append(serie)

    serie = next(item for item in datasets if item['label'] == row['sql_id'])
    serie['data'].append({'x': row['sample_time'],'y':row['resources_consumed']})

这构建了这种形式的词典:

{
"datasets": [{
    "data": [{
        "y": 3,
        "x": "2017-12-22 16:01"
    }, {
        "y": 23,
        "x": "2017-12-22 16:02"
    }, {
        "y": 33,
        "x": "2017-12-22 16:03"
    }, {
        "y": 12,
        "x": "2017-12-22 16:04"
    }, {
        "y": 5,
        "x": "2017-12-22 16:05"
    }, {
        "y": 13,
        "x": "2017-12-22 16:06"
    }, {
        "y": 17,
        "x": "2017-12-22 16:11"
    }, {
        "y": 24,
        "x": "2017-12-22 16:12"
    }, {
        "y": 12,
        "x": "2017-12-22 16:13"
    }, {
        "y": 9,
        "x": "2017-12-22 16:14"
    }, {
        "y": 10,
        "x": "2017-12-22 16:15"
    }, {
        "y": 24,
        "x": "2017-12-22 16:16"
    }, {
        "y": 28,
        "x": "2017-12-22 16:17"
    }, {
        "y": 4,
        "x": "2017-12-22 16:18"
    }, {
        "y": 18,
        "x": "2017-12-22 16:19"
    }, {
        "y": 25,
        "x": "2017-12-22 16:20"
    }, {
        "y": 25,
        "x": "2017-12-22 16:21"
    }, {
        "y": 14,
        "x": "2017-12-22 16:22"
    }, {
        "y": 10,
        "x": "2017-12-22 16:23"
    }, {
        "y": 9,
        "x": "2017-12-22 16:24"
    }],
    "backgroundColor": "#01F79A",
    "label": "3qkhfbf2kyvhk"
}, {
    "data": [{
        "y": 3,
        "x": "2017-12-22 16:01"
    }, {
        "y": 14,
        "x": "2017-12-22 16:02"
    }, {
        "y": 12,
        "x": "2017-12-22 16:03"
    }, {
        "y": 9,
        "x": "2017-12-22 16:04"
    }, {
        "y": 7,
        "x": "2017-12-22 16:05"
    }, {
        "y": 20,
        "x": "2017-12-22 16:06"
    }, {
        "y": 2,
        "x": "2017-12-22 16:10"
    }, {
        "y": 16,
        "x": "2017-12-22 16:11"
    }, {
        "y": 10,
        "x": "2017-12-22 16:12"
    }, {
        "y": 11,
        "x": "2017-12-22 16:13"
    }, {
        "y": 9,
        "x": "2017-12-22 16:14"
    }, {
        "y": 15,
        "x": "2017-12-22 16:15"
    }, {
        "y": 13,
        "x": "2017-12-22 16:16"
    }, {
        "y": 8,
        "x": "2017-12-22 16:17"
    }, {
        "y": 8,
        "x": "2017-12-22 16:18"
    }, {
        "y": 12,
        "x": "2017-12-22 16:19"
    }, {
        "y": 14,
        "x": "2017-12-22 16:20"
    }, {
        "y": 13,
        "x": "2017-12-22 16:21"
    }, {
        "y": 12,
        "x": "2017-12-22 16:22"
    }, {
        "y": 9,
        "x": "2017-12-22 16:23"
    }, {
        "y": 8,
        "x": "2017-12-22 16:24"
    }],
    "backgroundColor": "#743967",
    "label": "8u125dk9nfc0q"
}, {
    "data": [{
        "y": 1,
        "x": "2017-12-22 16:02"
    }, {
        "y": 1,
        "x": "2017-12-22 16:03"
    }, {
        "y": 1,
        "x": "2017-12-22 16:04"
    }, {
        "y": 2,
        "x": "2017-12-22 16:11"
    }, {
        "y": 1,
        "x": "2017-12-22 16:12"
    }, {
        "y": 2,
        "x": "2017-12-22 16:15"
    }, {
        "y": 2,
        "x": "2017-12-22 16:16"
    }, {
        "y": 1,
        "x": "2017-12-22 16:17"
    }, {
        "y": 2,
        "x": "2017-12-22 16:19"
    }, {
        "y": 1,
        "x": "2017-12-22 16:20"
    }, {
        "y": 1,
        "x": "2017-12-22 16:22"
    }, {
        "y": 1,
        "x": "2017-12-22 16:24"
    }],
    "backgroundColor": "#CA3582",
    "label": "b9nbhsbx8tqz5"
}, {
    "data": [{
        "y": 1,
        "x": "2017-12-22 16:02"
    }, {
        "y": 1,
        "x": "2017-12-22 16:04"
    }, {
        "y": 2,
        "x": "2017-12-22 16:11"
    }, {
        "y": 1,
        "x": "2017-12-22 16:12"
    }, {
        "y": 1,
        "x": "2017-12-22 16:14"
    }, {
        "y": 2,
        "x": "2017-12-22 16:15"
    }, {
        "y": 1,
        "x": "2017-12-22 16:19"
    }, {
        "y": 2,
        "x": "2017-12-22 16:20"
    }, {
        "y": 1,
        "x": "2017-12-22 16:22"
    }, {
        "y": 1,
        "x": "2017-12-22 16:24"
    }],
    "backgroundColor": "#8697A2",
    "label": "dp0vgyb1hsfjb"
}, {
    "data": [{
        "y": 5,
        "x": "2017-12-22 16:04"
    }, {
        "y": 4,
        "x": "2017-12-22 16:05"
    }, {
        "y": 8,
        "x": "2017-12-22 16:13"
    }, {
        "y": 1,
        "x": "2017-12-22 16:14"
    }, {
        "y": 9,
        "x": "2017-12-22 16:18"
    }, {
        "y": 8,
        "x": "2017-12-22 16:22"
    }, {
        "y": 1,
        "x": "2017-12-22 16:23"
    }],
    "backgroundColor": "#034D27",
    "label": "7726bj0dhtnmt"
}, {
    "data": [{
        "y": 12,
        "x": "2017-12-22 16:04"
    }, {
        "y": 12,
        "x": "2017-12-22 16:13"
    }, {
        "y": 12,
        "x": "2017-12-22 16:18"
    }, {
        "y": 10,
        "x": "2017-12-22 16:22"
    }],
    "backgroundColor": "#B3FDF5",
    "label": "cmx7t67z8wa74"
}, {
    "data": [{
        "y": 2,
        "x": "2017-12-22 16:04"
    }, {
        "y": 1,
        "x": "2017-12-22 16:05"
    }, {
        "y": 4,
        "x": "2017-12-22 16:12"
    }, {
        "y": 1,
        "x": "2017-12-22 16:15"
    }, {
        "y": 1,
        "x": "2017-12-22 16:17"
    }, {
        "y": 1,
        "x": "2017-12-22 16:22"
    }, {
        "y": 2,
        "x": "2017-12-22 16:24"
    }],
    "backgroundColor": "#3A74FB",
    "label": "ft7wcqu3hzvca"
}, {
    "data": [{
        "y": 7,
        "x": "2017-12-22 16:05"
    }, {
        "y": 6,
        "x": "2017-12-22 16:14"
    }, {
        "y": 6,
        "x": "2017-12-22 16:18"
    }, {
        "y": 6,
        "x": "2017-12-22 16:23"
    }],
    "backgroundColor": "#9733FC",
    "label": "7mwz4m103nn1k"
}, {
    "data": [{
        "y": 8,
        "x": "2017-12-22 16:05"
    }, {
        "y": 9,
        "x": "2017-12-22 16:14"
    }, {
        "y": 8,
        "x": "2017-12-22 16:18"
    }, {
        "y": 12,
        "x": "2017-12-22 16:23"
    }],
    "backgroundColor": "#383B19",
    "label": "9nrjf616y6g22"
}]
}

问题是我需要添加缺少的时间序列,以防它们在每个数据列表中不存在。 如果系列1是日期“2017-12-22 16:23”,则每个其他系列需要具有或不具有值的日期。如果数组中不存在该值,那么我需要为y添加0值。

我不知道如何在不进行大量嵌套for循环的情况下有效地做到这一点。

修改

目前我有类似的东西:

{
"datasets": [{
    "data": [{
        "y": 3,
        "x": "2017-12-22 16:01"
    }, {
        "y": 23,
        "x": "2017-12-22 16:02"
    }, {
        "y": 33,
        "x": "2017-12-22 16:03"
    }, {
        "y": 12,
        "x": "2017-12-22 16:04"
    }, {
        "y": 5,
        "x": "2017-12-22 16:05"
    }],
    "backgroundColor": "#01F79A",
    "label": "3qkhfbf2kyvhk"
}, {
    "data": [{
        "y": 9,
        "x": "2017-12-22 16:04"
    }, {
        "y": 7,
        "x": "2017-12-22 16:05"
    }, {
        "y": 20,
        "x": "2017-12-22 16:06"
    }, {
        "y": 2,
        "x": "2017-12-22 16:10"
    }, {
        "y": 16,
        "x": "2017-12-22 16:11"
    }],
    "backgroundColor": "#743967",
    "label": "8u125dk9nfc0q"
}]
}

我想要的是:

{
"datasets": [{
    "data": [{
        "y": 3,
        "x": "2017-12-22 16:01"
    }, {
        "y": 23,
        "x": "2017-12-22 16:02"
    }, {
        "y": 33,
        "x": "2017-12-22 16:03"
    }, {
        "y": 12,
        "x": "2017-12-22 16:04"
    }, {
        "y": 5,
        "x": "2017-12-22 16:05"
    },{
        "y": 0,
        "x": "2017-12-22 16:06"
    }, {
        "y": 0,
        "x": "2017-12-22 16:10"
    }, {
        "y": 0,
        "x": "2017-12-22 16:11"
    }],
    "backgroundColor": "#01F79A",
    "label": "3qkhfbf2kyvhk"
}, {
    "data": [{
        "y": 0,
        "x": "2017-12-22 16:01"
    }, {
        "y": 0,
        "x": "2017-12-22 16:02"
    }, {
        "y": 0,
        "x": "2017-12-22 16:03"
    },{
        "y": 9,
        "x": "2017-12-22 16:04"
    }, {
        "y": 7,
        "x": "2017-12-22 16:05"
    }, {
        "y": 20,
        "x": "2017-12-22 16:06"
    }, {
        "y": 2,
        "x": "2017-12-22 16:10"
    }, {
        "y": 16,
        "x": "2017-12-22 16:11"
    }],
    "backgroundColor": "#743967",
    "label": "8u125dk9nfc0q"
}]
}

每个系列必须存在每个不同的时间戳。如果系列中不存在时间戳,我必须使用0 y值添加它。

以下是我从数据库中获取的初始数据:

查询:

cursor.execute('SELECT strftime(\'%%Y-%%m-%%d %%H:%%M\',s.sample_time) as sample_time,\n'
                       '    id,\n'
                       '    dbid,\n'
                       '    sql_id,\n'
                       '    sql_plan_hash_value,\n'
                       '    sid,\n'
                       '    serial,\n'
                       '    count(sql_id) as resources_consumed\n'
                       'FROM sash s\n'
                       'where sql_id in (select sql_id from (\n'
                       '                                  select\n'
                       '                                      id,\n'
                       '                                      dbid,\n'
                       '                                      SQL_ID ,\n'
                       '                                      sql_plan_hash_value,\n'
                       '                                      sid,\n'
                       '                                      serial,\n'
                       '                                      count(*) as resources_consumed\n'
                       '                                 from sash\n'
                       '                                 where sid = %s \n'
                       '                                 and   serial = %s \n'
                       '                                 and   dbid = %s \n'
                       '                                 group by sql_id,sql_plan_hash_value,sid,serial,dbid\n'
                       '                         order by resources_consumed desc LIMIT 10)\n'
                       '             )\n'
                       'and sample_time between datetime(\'now\',\'localtime\',\'-60 minutes\') and datetime(\'now\',\'localtime\')        \n'
                       'and sid= %s \n'
                       'and serial= %s \n'
                       'group by strftime(\'%%Y-%%m-%%d %%H:%%M\',s.sample_time),sql_id,sql_plan_hash_value,sid,serial,dbid\n'
                       'order by strftime(\'%%Y-%%m-%%d %%H:%%M\',s.sample_time)', [sid, serial, dbid, sid, serial])

输出:

    [{
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:41',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59389,
    'resources_consumed': 1
}, {
    'sql_id': u'ft7wcqu3hzvca',
    'sql_plan_hash_value': 2265968010L,
    'sample_time': u'2017-12-23 10:41',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59395,
    'resources_consumed': 2
}, {
    'sql_id': u'0m9b1dywgrdqj',
    'sql_plan_hash_value': 3103504081L,
    'sample_time': u'2017-12-23 10:42',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59469,
    'resources_consumed': 1
}, {
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:42',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59511,
    'resources_consumed': 17
}, {
    'sql_id': u'50kcsz2gh1w84',
    'sql_plan_hash_value': 2667639044L,
    'sample_time': u'2017-12-23 10:42',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59421,
    'resources_consumed': 1
}, {
    'sql_id': u'8u125dk9nfc0q',
    'sql_plan_hash_value': 2470916118L,
    'sample_time': u'2017-12-23 10:42',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59503,
    'resources_consumed': 8
}, {
    'sql_id': u'dp0vgyb1hsfjb',
    'sql_plan_hash_value': 3272358443L,
    'sample_time': u'2017-12-23 10:42',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59454,
    'resources_consumed': 1
}, {
    'sql_id': u'ft7wcqu3hzvca',
    'sql_plan_hash_value': 2265968010L,
    'sample_time': u'2017-12-23 10:42',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59510,
    'resources_consumed': 8
}, {
    'sql_id': u'1xc91cuvu7j11',
    'sql_plan_hash_value': 3080963105L,
    'sample_time': u'2017-12-23 10:43',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59555,
    'resources_consumed': 3
}, {
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:43',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59577,
    'resources_consumed': 26
}, {
    'sql_id': u'50kcsz2gh1w84',
    'sql_plan_hash_value': 2667639044L,
    'sample_time': u'2017-12-23 10:43',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59532,
    'resources_consumed': 1
}, {
    'sql_id': u'8u125dk9nfc0q',
    'sql_plan_hash_value': 2470916118L,
    'sample_time': u'2017-12-23 10:43',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59578,
    'resources_consumed': 8
}, {
    'sql_id': u'ft7wcqu3hzvca',
    'sql_plan_hash_value': 2265968010L,
    'sample_time': u'2017-12-23 10:43',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59565,
    'resources_consumed': 3
}, {
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:44',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59644,
    'resources_consumed': 17
}, {
    'sql_id': u'50kcsz2gh1w84',
    'sql_plan_hash_value': 2667639044L,
    'sample_time': u'2017-12-23 10:44',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59623,
    'resources_consumed': 1
}, {
    'sql_id': u'8u125dk9nfc0q',
    'sql_plan_hash_value': 2470916118L,
    'sample_time': u'2017-12-23 10:44',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59642,
    'resources_consumed': 11
}, {
    'sql_id': u'dp0vgyb1hsfjb',
    'sql_plan_hash_value': 3272358443L,
    'sample_time': u'2017-12-23 10:44',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59614,
    'resources_consumed': 2
}, {
    'sql_id': u'ft7wcqu3hzvca',
    'sql_plan_hash_value': 2265968010L,
    'sample_time': u'2017-12-23 10:44',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59648,
    'resources_consumed': 3
}, {
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:45',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59665,
    'resources_consumed': 3
}, {
    'sql_id': u'50kcsz2gh1w84',
    'sql_plan_hash_value': 2667639044L,
    'sample_time': u'2017-12-23 10:45',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59649,
    'resources_consumed': 1
}, {
    'sql_id': u'7726bj0dhtnmt',
    'sql_plan_hash_value': 453825145,
    'sample_time': u'2017-12-23 10:45',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59718,
    'resources_consumed': 11
}, {
    'sql_id': u'8u125dk9nfc0q',
    'sql_plan_hash_value': 2470916118L,
    'sample_time': u'2017-12-23 10:45',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59707,
    'resources_consumed': 13
}, {
    'sql_id': u'cmx7t67z8wa74',
    'sql_plan_hash_value': 4270729444L,
    'sample_time': u'2017-12-23 10:45',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59705,
    'resources_consumed': 19
}, {
    'sql_id': u'0m9b1dywgrdqj',
    'sql_plan_hash_value': 3103504081L,
    'sample_time': u'2017-12-23 10:47',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59765,
    'resources_consumed': 2
}, {
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:47',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59768,
    'resources_consumed': 10
}, {
    'sql_id': u'50kcsz2gh1w84',
    'sql_plan_hash_value': 2667639044L,
    'sample_time': u'2017-12-23 10:47',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59770,
    'resources_consumed': 1
}, {
    'sql_id': u'8u125dk9nfc0q',
    'sql_plan_hash_value': 2470916118L,
    'sample_time': u'2017-12-23 10:47',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59764,
    'resources_consumed': 11
}, {
    'sql_id': u'dp0vgyb1hsfjb',
    'sql_plan_hash_value': 3272358443L,
    'sample_time': u'2017-12-23 10:47',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59754,
    'resources_consumed': 1
}, {
    'sql_id': u'3qkhfbf2kyvhk',
    'sql_plan_hash_value': 2234478098L,
    'sample_time': u'2017-12-23 10:48',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59779,
    'resources_consumed': 4
}, {
    'sql_id': u'8u125dk9nfc0q',
    'sql_plan_hash_value': 2470916118L,
    'sample_time': u'2017-12-23 10:48',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59788,
    'resources_consumed': 5
}, {
    'sql_id': u'ft7wcqu3hzvca',
    'sql_plan_hash_value': 2265968010L,
    'sample_time': u'2017-12-23 10:48',
    'dbid': 312109145,
    'sid': 64,
    'serial': 16655,
    'id': 59789,
    'resources_consumed': 1
}]

1 个答案:

答案 0 :(得分:0)

这是 Python 2 的一些内容,可以实现我想要的功能。我留下了一些print()调用它,其中显示了内部构建和使用的几个重要数据结构的内容。看看它们中的内容应该更容易理解它是如何工作的。

from __future__ import print_function
from collections import defaultdict
from pprint import pformat
from random import randint
from series import data

def indent(text, amount, char=' '):
    """ Indent each line of text by indicated number of characters. """
    padding = amount * char
    return ''.join(padding+line for line in text.splitlines(True))

def GetRandomHexColor():
    return '#{:06X}'.format(randint(0, 0xffffff))


# Extract the needed information from data grouped so that the sample times
# are grouped together by sql_id.
timestamps = defaultdict(dict)
for row in data:
    timestamps[row['sql_id']][row['sample_time']] = row['resources_consumed']
print('timestamps:')
print(indent(pformat(dict(timestamps)), 4))

# Create a sorted list of all the unique timestamps that exist.
master_series = sorted(set(stamp for stamps in timestamps.values()
                            for stamp in stamps))
print()
print('master_series:')
print(indent(pformat(master_series), 4))

# Create list of entries where each has a sublist that consists of values for
# every timestamp in the master_series.
datasets = [{'label': sql_id,
             'backgroundColor': GetRandomHexColor(),
             'data': [{'y': timestamps[sql_id][stamp]
                                if stamp in timestamps[sql_id] else 0,
                       'x': stamp} for stamp in master_series]
            } for sql_id in sorted(timestamps)]
print()
print('datasets:')
print(indent(pformat(datasets), 4))

输出:

timestamps:
    {u'0m9b1dywgrdqj': {u'2017-12-23 10:42': 1, u'2017-12-23 10:47': 2},
     u'1xc91cuvu7j11': {u'2017-12-23 10:43': 3},
     u'3qkhfbf2kyvhk': {u'2017-12-23 10:41': 1,
                        u'2017-12-23 10:42': 17,
                        u'2017-12-23 10:43': 26,
                        u'2017-12-23 10:44': 17,
                        u'2017-12-23 10:45': 3,
                        u'2017-12-23 10:47': 10,
                        u'2017-12-23 10:48': 4},
     u'50kcsz2gh1w84': {u'2017-12-23 10:42': 1,
                        u'2017-12-23 10:43': 1,
                        u'2017-12-23 10:44': 1,
                        u'2017-12-23 10:45': 1,
                        u'2017-12-23 10:47': 1},
     u'7726bj0dhtnmt': {u'2017-12-23 10:45': 11},
     u'8u125dk9nfc0q': {u'2017-12-23 10:42': 8,
                        u'2017-12-23 10:43': 8,
                        u'2017-12-23 10:44': 11,
                        u'2017-12-23 10:45': 13,
                        u'2017-12-23 10:47': 11,
                        u'2017-12-23 10:48': 5},
     u'cmx7t67z8wa74': {u'2017-12-23 10:45': 19},
     u'dp0vgyb1hsfjb': {u'2017-12-23 10:42': 1,
                        u'2017-12-23 10:44': 2,
                        u'2017-12-23 10:47': 1},
     u'ft7wcqu3hzvca': {u'2017-12-23 10:41': 2,
                        u'2017-12-23 10:42': 8,
                        u'2017-12-23 10:43': 3,
                        u'2017-12-23 10:44': 3,
                        u'2017-12-23 10:48': 1}}

master_series:
    [u'2017-12-23 10:41',
     u'2017-12-23 10:42',
     u'2017-12-23 10:43',
     u'2017-12-23 10:44',
     u'2017-12-23 10:45',
     u'2017-12-23 10:47',
     u'2017-12-23 10:48']

datasets:
    [{'backgroundColor': '#BBF2C0',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 1},
               {'x': u'2017-12-23 10:43', 'y': 0},
               {'x': u'2017-12-23 10:44', 'y': 0},
               {'x': u'2017-12-23 10:45', 'y': 0},
               {'x': u'2017-12-23 10:47', 'y': 2},
               {'x': u'2017-12-23 10:48', 'y': 0}],
      'label': u'0m9b1dywgrdqj'},
     {'backgroundColor': '#09BC4F',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 0},
               {'x': u'2017-12-23 10:43', 'y': 3},
               {'x': u'2017-12-23 10:44', 'y': 0},
               {'x': u'2017-12-23 10:45', 'y': 0},
               {'x': u'2017-12-23 10:47', 'y': 0},
               {'x': u'2017-12-23 10:48', 'y': 0}],
      'label': u'1xc91cuvu7j11'},
     {'backgroundColor': '#19F805',
      'data': [{'x': u'2017-12-23 10:41', 'y': 1},
               {'x': u'2017-12-23 10:42', 'y': 17},
               {'x': u'2017-12-23 10:43', 'y': 26},
               {'x': u'2017-12-23 10:44', 'y': 17},
               {'x': u'2017-12-23 10:45', 'y': 3},
               {'x': u'2017-12-23 10:47', 'y': 10},
               {'x': u'2017-12-23 10:48', 'y': 4}],
      'label': u'3qkhfbf2kyvhk'},
     {'backgroundColor': '#A85778',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 1},
               {'x': u'2017-12-23 10:43', 'y': 1},
               {'x': u'2017-12-23 10:44', 'y': 1},
               {'x': u'2017-12-23 10:45', 'y': 1},
               {'x': u'2017-12-23 10:47', 'y': 1},
               {'x': u'2017-12-23 10:48', 'y': 0}],
      'label': u'50kcsz2gh1w84'},
     {'backgroundColor': '#9FEC4A',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 0},
               {'x': u'2017-12-23 10:43', 'y': 0},
               {'x': u'2017-12-23 10:44', 'y': 0},
               {'x': u'2017-12-23 10:45', 'y': 11},
               {'x': u'2017-12-23 10:47', 'y': 0},
               {'x': u'2017-12-23 10:48', 'y': 0}],
      'label': u'7726bj0dhtnmt'},
     {'backgroundColor': '#4FBF10',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 8},
               {'x': u'2017-12-23 10:43', 'y': 8},
               {'x': u'2017-12-23 10:44', 'y': 11},
               {'x': u'2017-12-23 10:45', 'y': 13},
               {'x': u'2017-12-23 10:47', 'y': 11},
               {'x': u'2017-12-23 10:48', 'y': 5}],
      'label': u'8u125dk9nfc0q'},
     {'backgroundColor': '#ED6D56',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 0},
               {'x': u'2017-12-23 10:43', 'y': 0},
               {'x': u'2017-12-23 10:44', 'y': 0},
               {'x': u'2017-12-23 10:45', 'y': 19},
               {'x': u'2017-12-23 10:47', 'y': 0},
               {'x': u'2017-12-23 10:48', 'y': 0}],
      'label': u'cmx7t67z8wa74'},
     {'backgroundColor': '#8E3D97',
      'data': [{'x': u'2017-12-23 10:41', 'y': 0},
               {'x': u'2017-12-23 10:42', 'y': 1},
               {'x': u'2017-12-23 10:43', 'y': 0},
               {'x': u'2017-12-23 10:44', 'y': 2},
               {'x': u'2017-12-23 10:45', 'y': 0},
               {'x': u'2017-12-23 10:47', 'y': 1},
               {'x': u'2017-12-23 10:48', 'y': 0}],
      'label': u'dp0vgyb1hsfjb'},
     {'backgroundColor': '#1FC7DC',
      'data': [{'x': u'2017-12-23 10:41', 'y': 2},
               {'x': u'2017-12-23 10:42', 'y': 8},
               {'x': u'2017-12-23 10:43', 'y': 3},
               {'x': u'2017-12-23 10:44', 'y': 3},
               {'x': u'2017-12-23 10:45', 'y': 0},
               {'x': u'2017-12-23 10:47', 'y': 0},
               {'x': u'2017-12-23 10:48', 'y': 1}],
      'label': u'ft7wcqu3hzvca'}]

这是series.py编辑的import模块。它所做的就是定义您现在在问题中的样本数据列表:

""" Define data from database. """

data = [
    {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:41',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59389,
        'resources_consumed': 1
    }, {
        'sql_id': u'ft7wcqu3hzvca',
        'sql_plan_hash_value': 2265968010L,
        'sample_time': u'2017-12-23 10:41',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59395,
        'resources_consumed': 2
    }, {
        'sql_id': u'0m9b1dywgrdqj',
        'sql_plan_hash_value': 3103504081L,
        'sample_time': u'2017-12-23 10:42',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59469,
        'resources_consumed': 1
    }, {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:42',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59511,
        'resources_consumed': 17
    }, {
        'sql_id': u'50kcsz2gh1w84',
        'sql_plan_hash_value': 2667639044L,
        'sample_time': u'2017-12-23 10:42',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59421,
        'resources_consumed': 1
    }, {
        'sql_id': u'8u125dk9nfc0q',
        'sql_plan_hash_value': 2470916118L,
        'sample_time': u'2017-12-23 10:42',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59503,
        'resources_consumed': 8
    }, {
        'sql_id': u'dp0vgyb1hsfjb',
        'sql_plan_hash_value': 3272358443L,
        'sample_time': u'2017-12-23 10:42',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59454,
        'resources_consumed': 1
    }, {
        'sql_id': u'ft7wcqu3hzvca',
        'sql_plan_hash_value': 2265968010L,
        'sample_time': u'2017-12-23 10:42',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59510,
        'resources_consumed': 8
    }, {
        'sql_id': u'1xc91cuvu7j11',
        'sql_plan_hash_value': 3080963105L,
        'sample_time': u'2017-12-23 10:43',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59555,
        'resources_consumed': 3
    }, {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:43',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59577,
        'resources_consumed': 26
    }, {
        'sql_id': u'50kcsz2gh1w84',
        'sql_plan_hash_value': 2667639044L,
        'sample_time': u'2017-12-23 10:43',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59532,
        'resources_consumed': 1
    }, {
        'sql_id': u'8u125dk9nfc0q',
        'sql_plan_hash_value': 2470916118L,
        'sample_time': u'2017-12-23 10:43',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59578,
        'resources_consumed': 8
    }, {
        'sql_id': u'ft7wcqu3hzvca',
        'sql_plan_hash_value': 2265968010L,
        'sample_time': u'2017-12-23 10:43',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59565,
        'resources_consumed': 3
    }, {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:44',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59644,
        'resources_consumed': 17
    }, {
        'sql_id': u'50kcsz2gh1w84',
        'sql_plan_hash_value': 2667639044L,
        'sample_time': u'2017-12-23 10:44',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59623,
        'resources_consumed': 1
    }, {
        'sql_id': u'8u125dk9nfc0q',
        'sql_plan_hash_value': 2470916118L,
        'sample_time': u'2017-12-23 10:44',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59642,
        'resources_consumed': 11
    }, {
        'sql_id': u'dp0vgyb1hsfjb',
        'sql_plan_hash_value': 3272358443L,
        'sample_time': u'2017-12-23 10:44',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59614,
        'resources_consumed': 2
    }, {
        'sql_id': u'ft7wcqu3hzvca',
        'sql_plan_hash_value': 2265968010L,
        'sample_time': u'2017-12-23 10:44',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59648,
        'resources_consumed': 3
    }, {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:45',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59665,
        'resources_consumed': 3
    }, {
        'sql_id': u'50kcsz2gh1w84',
        'sql_plan_hash_value': 2667639044L,
        'sample_time': u'2017-12-23 10:45',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59649,
        'resources_consumed': 1
    }, {
        'sql_id': u'7726bj0dhtnmt',
        'sql_plan_hash_value': 453825145,
        'sample_time': u'2017-12-23 10:45',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59718,
        'resources_consumed': 11
    }, {
        'sql_id': u'8u125dk9nfc0q',
        'sql_plan_hash_value': 2470916118L,
        'sample_time': u'2017-12-23 10:45',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59707,
        'resources_consumed': 13
    }, {
        'sql_id': u'cmx7t67z8wa74',
        'sql_plan_hash_value': 4270729444L,
        'sample_time': u'2017-12-23 10:45',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59705,
        'resources_consumed': 19
    }, {
        'sql_id': u'0m9b1dywgrdqj',
        'sql_plan_hash_value': 3103504081L,
        'sample_time': u'2017-12-23 10:47',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59765,
        'resources_consumed': 2
    }, {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:47',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59768,
        'resources_consumed': 10
    }, {
        'sql_id': u'50kcsz2gh1w84',
        'sql_plan_hash_value': 2667639044L,
        'sample_time': u'2017-12-23 10:47',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59770,
        'resources_consumed': 1
    }, {
        'sql_id': u'8u125dk9nfc0q',
        'sql_plan_hash_value': 2470916118L,
        'sample_time': u'2017-12-23 10:47',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59764,
        'resources_consumed': 11
    }, {
        'sql_id': u'dp0vgyb1hsfjb',
        'sql_plan_hash_value': 3272358443L,
        'sample_time': u'2017-12-23 10:47',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59754,
        'resources_consumed': 1
    }, {
        'sql_id': u'3qkhfbf2kyvhk',
        'sql_plan_hash_value': 2234478098L,
        'sample_time': u'2017-12-23 10:48',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59779,
        'resources_consumed': 4
    }, {
        'sql_id': u'8u125dk9nfc0q',
        'sql_plan_hash_value': 2470916118L,
        'sample_time': u'2017-12-23 10:48',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59788,
        'resources_consumed': 5
    }, {
        'sql_id': u'ft7wcqu3hzvca',
        'sql_plan_hash_value': 2265968010L,
        'sample_time': u'2017-12-23 10:48',
        'dbid': 312109145,
        'sid': 64,
        'serial': 16655,
        'id': 59789,
        'resources_consumed': 1
    }
]

节日快乐!