嘿,我是python的新手我有这段代码将出生信息存储到Google App Engine中的数据存储区。代码有效,但这是正确的方法吗?有没有更简单的方法来确保密钥在存储到数据存储区之前存在?
def store_birthinfo(self, user, birthday):
"""
Store birthinfo
"""
name = ''
date = ''
place = ''
country = ''
for key in birthday.keys():
if key == 'name':
name = birthday['name']
elif key == 'date':
date = birthday['date']
elif key == 'place':
place = birthday['place']
elif key == 'country':
country = birthday['country']
birthinfo = BirthInfo(user = user,
date = date,
place = place,
country = country)
birthinfo.put()
答案 0 :(得分:2)
def store_birthinfo(self, user, birthday):
"""
Store birthinfo
"""
birthinfo = BirthInfo(user=user, **birthday)
birthinfo.put()
查看unpacking argument lists上的文档。
答案 1 :(得分:1)
ʞɔıu的答案是最短的,尽管它的语义与你的语法略有不同,因为如果字典中缺少键,你的答案将提供一个显式的空字符串参数,而ʞɔıu将完全省略关键字参数。
为了完整起见,有一种更简单的方法来做你正在做的事情,而不是一直到**:
def store_birthinfo(self, user, birthday):
"""
Store birthinfo
"""
birthinfo = BirthInfo(user = user,
date = birthday.get('date', ''),
place = birthday.get('place', ''),
country = birthday.get('country', ''))
birthinfo.put()
答案 2 :(得分:1)
您可以创建默认字典,然后按
更新目标字典def store_birthinfo(self, user, birthday):
"""Store birthinfo"""
birth_defaults = { 'name' : '',
'date' : '',
'place' : '',
'country' : ''}
birth_defaults.update(birthday)
birthinfo = BirthInfo(**birth_defaults)
birthinfo.put()
通过这种方式,您将始终设置所有参数。
答案 3 :(得分:0)
问题可能是您的变量'birthday'包含BirthInfo类不期望的键。一个更可靠的解决方案可能是这个,它还可以让您清楚地了解空白变为无或空字符串:
def store_birthinfo(self, user, birthday):
data = dict(name='', date='', place='', country='')
for key in [x for x in birthday.keys() if x in data]:
data[key] = birthday[key]
BirthInfo(user=user, **data).put()
答案 4 :(得分:0)
在Peter Bengtsson的帖子的基础上,您还可以定义相关键列表,并将数据保留为空{}
,直到循环填充它为止。
def store_birthinfo(self, user, birthday):
data = {}
for key in 'date', 'place', 'country':
data[key] = birthday.get(key, '')
BirthInfo(user=user, **data).put()
我相信这是指定生日词典中使用哪些键的最简洁和可扩展的方法。稍微详细一点,你可能会编写一个函数来内省BirthInfo
它可以接受的参数。