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

时间:2013-06-10 21:20:33

标签: python list google-app-engine dictionary google-cloud-datastore

我正在尝试写入GAE数据存储区中的模型,该模型将包含三个字段:日期,整数,整数。

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)]

3 个答案:

答案 0 :(得分:6)

我希望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]

编辑:同样使用python 2.7,您可以直接使用dict中的viewkeys而不是使用set

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

答案 1 :(得分:2)

改善@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)

答案 2 :(得分:1)

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