小编ang*_*lar的帖子

将结果行映射到python sqlite中的namedtuple

我正在使用sqlite3的python api,我有一个带有id,name和creation_date字段的商店语言的小表.我试图将原始查询结果映射到namedtuple文档推荐的那个,这样我可以以更易读的方式管理行,所以这是我的namedtuple.

LanguageRecord = namedtuple('LanguageRecord', 'id, name, creation_date')
Run Code Online (Sandbox Code Playgroud)

文档为映射建议的代码如下:

for language in map(LanguageRecord._make, c.fetchall()):
  # do something with languages
Run Code Online (Sandbox Code Playgroud)

当我想返回一组语言时,这很好,但在这种情况下,我只想检索一种语言:

c.execute('SELECT * FROM language WHERE name=?', (name,))
Run Code Online (Sandbox Code Playgroud)

所以我的第一次尝试是这样的:

language = map(LanguageRecord._make, c.fetchone())
Run Code Online (Sandbox Code Playgroud)

此代码不起作用,因为fetchone()返回一个元组而不是一个具有一个元组的列表,因此该map函数尝试namedtuples为每个元组字段思想创建三个.

我解决这个问题的第一种方法是显式创建一个列表并将其附加到元组结果,例如:

languages = []
languages.append(c.fetchone())
for language in map(LanguageRecord._make, languages):
  # do something with language
Run Code Online (Sandbox Code Playgroud)

我的第二种方法是使用fetchall()虽然我只想要一条记录.我可以unique在数据库中使用约束设置名称字段,以便仅对一个结果进行garantize.

for language in map(LanguageRecord._make, c.fetchall()):
  # do something with languages
Run Code Online (Sandbox Code Playgroud)

另一种方法可以在fetchall()[0]没有unique约束的情况下使用,仅仅对一个结果进行garantize.

我的问题是哪种方法是处理这个问题的最好和最常用的方法,我应该总是使用fetchall …

python sqlite namedtuple

12
推荐指数
2
解决办法
8261
查看次数

如果不是可迭代的话,将python,wrap和object放入一个列表中

我希望有一个包装和对象在一个可迭代的函数,以允许该函数的客户端对待集合和单个对象相同的方式,我做了以下内容:

 def to_iter(obj):
     try:
         iter(obj)
         return obj
     except TypeError:
         return [obj]
Run Code Online (Sandbox Code Playgroud)

有没有一种pythonic的方法来做到这一点?如果obj是一个字符串,我想处理的字符串作为单个对象?我应该使用isinstance代替iter

python loops composite

8
推荐指数
1
解决办法
4821
查看次数

溢出:隐藏在div和body上,行为不同

给出这个HTML:

<body>
  <div id="a"></div>
  <div id="b"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

我想#b填充其容器块的所有剩余垂直空间,我从这开始:

body {
  height: 500px;
  width: 500px;
  overflow: hidden;
}

#a {
  height: 100px;
  width: 100px;
}

#b {
  height: 100%;
  width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

所以#b是100%的高度,这意味着它正在占据其父容器块的高度,也就是说,500px问题是overflow: hidden;似乎不起作用,#b没有被剪裁.

另一方面,如果我用另一个具有上述相同属性的div进行换行#a,我得到了所需的结果:#bbody

#wrap {
  height: 500px;
  width: 500px;
  overflow: hidden;
}

#a {
  height: 100px;
  width: 100px;
}

#b {
  height: 100%;
  width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

用这个HTML当然:

<body>
<div id="wrap">
<div id="a"></div>
<div id="b"></div>
</div> …
Run Code Online (Sandbox Code Playgroud)

html css overflow

6
推荐指数
1
解决办法
952
查看次数

python collections.Counter中的对象equallity

我有和collection.Counter类的实例,我也有一些对象,如:

p1 = Person(name='John')
p2 = Person(name='John')
p3 = Person(name='Jane')
Run Code Online (Sandbox Code Playgroud)

我想在Counter的一个实例中保存此person对象的计数,考虑到具有相同名称的person对象必须增加相同的人数,所以如果我有一个包含所有person对象的列表:

people = [p1, p2, p3]
Run Code Online (Sandbox Code Playgroud)

我用它填充我的柜台:

c = Counter(people)
Run Code Online (Sandbox Code Playgroud)

我想得到以下内容:

c[p1] #prints 2
c[p2] #prints 2
c[p3] #prints 1
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试是__eq__为person对象实现一个新方法

def __eq__(self, other):
  return self.name == other.name
Run Code Online (Sandbox Code Playgroud)

我认为这可以工作,因为计数器对象似乎基于关键对象的相等性增加了键的计数,如:

c = Counter(['A', 'A', 'B'])
c['A'] #prints 2
c['B'] #prints 1
Run Code Online (Sandbox Code Playgroud)

另一个尝试可以从Counter继承并覆盖Counter用于测量对象之间相等性的基础方法,我不确定但我认为Counter使用__contains__方法.

我的问题是,如果有任何方法可以在不使用继承的情况下获得此行为,如果没有,那么最好的方法是什么呢?

python counter dictionary object-equality

3
推荐指数
1
解决办法
1099
查看次数

惯用的python,管理函数中的默认参数

我经常遇到大多数人在函数或方法中管理默认参数值,如下所示:

def foo(L=None):
  if L is None:
    L = []
Run Code Online (Sandbox Code Playgroud)

但是,我看到其他人做的事情如下:

def foo(L=None):
  L = L or []
Run Code Online (Sandbox Code Playgroud)

我不知道我是否遗漏了一些东西,但是,为什么大多数人使用第一种方法而不是第二种?它们是同样的东西吗?似乎第二个更清晰,更短.

python arguments default idiomatic

3
推荐指数
1
解决办法
162
查看次数

如何用python妖娆验证网址和电子邮件?

我想验证url和电子邮件输入数据与python voluptuous,可能是这样的:

schema = Schema({
    Required('url'): All(str, Url()),
    Required('email'): All(str, Email())
})
Run Code Online (Sandbox Code Playgroud)

看看源代码,我看到妖娆有一个内置的Url功能,在电子邮件的情况下它没有,所以我想建立我自己的,问题是我不知道要调用这个功能在架构内部.

python validation

2
推荐指数
1
解决办法
2408
查看次数

在min python函数中优先于正值而不是负值.

说我有一个值列表:

l = [1, -1]
Run Code Online (Sandbox Code Playgroud)

并且我想获取更接近其他值的列表值,例如0,我可以使用此:

min(l, key=lambda v: abs(v - 0))
# prints 1
Run Code Online (Sandbox Code Playgroud)

但如果我改变列表中值的顺序,如:

l = [-1, 1]
Run Code Online (Sandbox Code Playgroud)

而且我在上面调用相同的函数-1而不是1,所以如果在同一距离有正值和负值,我怎么能总是得到正值?

python distance min

2
推荐指数
1
解决办法
703
查看次数