Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 改进代码:测试dict中的键和数据存储中的存储_Python_Google App Engine - Fatal编程技术网

Python 改进代码:测试dict中的键和数据存储中的存储

Python 改进代码:测试dict中的键和数据存储中的存储,python,google-app-engine,Python,Google App Engine,嘿,我对python还比较陌生,我有一段代码,它将出生信息存储到Google App Engine的数据存储中。代码可以工作,但它是正确的方法吗?是否有一种更简单的方法来执行此操作,即在将密钥存储在数据存储中之前确保密钥存在 def store_birthinfo(self, user, birthday): """ Store birthinfo """ name = '' date = '' place = '' country = '' for

嘿,我对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()
请参阅上的文档


请参阅上的文档。

ʞɔı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()

ʞɔı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()

如果变量'birthday'包含类birthdinfo不期望的键,则可能会出现问题。一个更可靠的解决方案可能是这样的,它还可以让您清楚地了解空白值是否变为无或空字符串:

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

如果变量'birthday'包含类birthdinfo不期望的键,则可能会出现问题。一个更可靠的解决方案可能是这样的,它还可以让您清楚地了解空白值是否变为无或空字符串:

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

您可以创建默认词典,然后更新目标词典,如中所示

def store_birthinfo(self, user, birthday):
  """Store birthinfo"""
  birth_defaults = { 'name' : '',
                     'date' : '',
                     'place' : '',
                     'country' : ''}

  birth_defaults.update(birthday)
  birthinfo = BirthInfo(**birth_defaults)
  birthinfo.put()

这样,您将始终设置所有参数。

您可以创建一个默认字典,然后更新目标字典,如中所示

def store_birthinfo(self, user, birthday):
  """Store birthinfo"""
  birth_defaults = { 'name' : '',
                     'date' : '',
                     'place' : '',
                     'country' : ''}

  birth_defaults.update(birthday)
  birthinfo = BirthInfo(**birth_defaults)
  birthinfo.put()

通过这种方式,您将始终设置所有参数。

基于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
,以获取它可以接受的参数。

基于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
它可以接受的参数。

谢谢。如果其中一个键不存在,它会将该键的值设置为空字符串还是无?它根本不会设置值,BirthInfo构造函数中将缺少关键字。我不确定这会有什么影响。它应该是该列的默认值,除非你给它一个不同的默认值,否则可能没有。如果
birth
有一个额外的字段,这将导致
TypeError
。只有当您担心
生日
有额外字段时,这才是一个问题。谢谢。如果其中一个键不存在,它会将该键的值设置为空字符串还是无?它根本不会设置值,BirthInfo构造函数中将缺少关键字。我不确定这会有什么影响。它应该是该列的默认值,除非你给它一个不同的默认值,否则可能没有。如果
birth
有一个额外的字段,这将导致
TypeError
。这只是一个问题,如果你担心
生日
有额外的字段。我更喜欢
data.update(birth)
,因为它比loop.data.update更容易阅读,但效果却截然不同。它将在数据中不存在的地方添加新字段。这个循环将只分配给在数据中定义的键。我更喜欢
data.update(birthday)
,因为它比loop.data.update更容易阅读,不过效果非常不同。它将在数据中不存在的地方添加新字段。此循环将仅分配给已在数据中定义的键。Re:most-terse,请尝试
data={(键,生日。get(键,'))作为输入('date','place','country')}
grated。我应该考虑一下行李员Ted的睿智的话:“越少做声明性陈述,越不容易在回顾中显得愚蠢。”我认为您使用的是python 3中的字典生成器语法。但我认为这也有点不同。这将是{key:birthday.get(key“”)for key in('date','place','country')}您所做的将是一个集合生成器,创建一组元组。Re:最简洁的是,尝试
data={(key,birthday.get(key“”)for key in('date','place','country')
。我应该考虑一下行李员Ted的睿智的话:“越少做声明性陈述,越不容易在回顾中显得愚蠢。”我认为您使用的是python 3中的字典生成器语法。但我认为这也有点不同。这将是{key:birthday.get(key',)for key in('date','place','country')}您所做的是一个集合生成器,创建一组元组。