如何从两个词典创建列表?

2024-04-26 04:31:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试写入GAE数据存储中的一个模型,该模型将有三个字段:date、integer、integer。你知道吗

class fusSent(db.Model):
    """ Models a list of the follow-ups due and follow-ups sent """
    date_created = db.DateTimeProperty(auto_now_add=True)
    fu_date = db.DateProperty()
    fus_due = db.IntegerProperty()
    fus_sent = db.IntegerProperty()

这些数据来自两个不同的字典,它们有匹配的键(日期)。见下文。你知道吗

fus_d = {2013-01-01: 1, 2013-04-01: 1, 2013-02-01: 1, 2013-03-01: 1}
fus_s = {2013-01-01: 0, 2013-04-01: 0, 2013-02-01: 1, 2013-03-01: 1} 

我的猜测是,我需要将字典组合成一个列表(如下所示),以便将其保存到数据存储中。然而,我不完全确定这是最好的方法。你知道吗

fu_list = [(2013-01-01, 1, 0), (2013-04-01, 1, 0), (2013-02-01, 1, 1), (2013-03-01, 1, 1)]

Tags: 数据模型dbdate字典integerlistsent
3条回答

@cmd拥有生成您请求的列表的代码,但无法将其放入数据存储。此代码将创建实体并保存它们:

s = set(fus_d.keys())
s.update(fus_s.keys())
for k in s:
    sent = fusSent(fu_date=k, fus_due=fus_d.get(k), fus_sent=fus_s.get(k))
    sent.put()

我希望fus_dfus_s字典确实有日期,因为您的2013-01-01示例实际上是一个计算到2011的数学表达式。但以下几点应该有用

s = set(fus_d.keys())
s.update(fus_s.keys())
fu_list = [(k, fus_d.get(k), fus_s.get(k)) for k in s]

编辑:同样在python2.7中,您可以直接从dict使用viewkeys,而不是使用set。你知道吗

fu_list = [(k, fus_d.get(k), fus_s.get(k)) for k in fus_d.viewkeys() | fus_s]

提高@cmd答案。你知道吗

为了写入数据库,您应该构造一个模型实例列表,并调用db.put将它们保存到数据库中,如下所示:

fus_d = {'2013-01-01': 1, '2013-04-01': 1, '2013-02-01': 1, '2013-03-01': 1}
fus_s = {'2013-01-01': 0, '2013-04-01': 0, '2013-02-01': 1, '2013-03-01': 1}

s = set(fus_d.keys())
s.update(fus_s.keys())
fu_list = [fusSent(fu_date=k, fus_due=fus_d.get(k, 0), fus_sent=fus_s.get(k, 0)) for k in s]
db.put(fu_list)

相关问题 更多 >

    热门问题