我正在使用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 …
我希望有一个包装和对象在一个可迭代的函数,以允许该函数的客户端对待集合和单个对象相同的方式,我做了以下内容:
def to_iter(obj):
try:
iter(obj)
return obj
except TypeError:
return [obj]
Run Code Online (Sandbox Code Playgroud)
有没有一种pythonic的方法来做到这一点?如果obj是一个字符串,我想处理的字符串作为单个对象?我应该使用isinstance代替iter?
给出这个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) 我有和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__方法.
我的问题是,如果有任何方法可以在不使用继承的情况下获得此行为,如果没有,那么最好的方法是什么呢?
我经常遇到大多数人在函数或方法中管理默认参数值,如下所示:
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)
我不知道我是否遗漏了一些东西,但是,为什么大多数人使用第一种方法而不是第二种?它们是同样的东西吗?似乎第二个更清晰,更短.
我想验证url和电子邮件输入数据与python voluptuous,可能是这样的:
schema = Schema({
Required('url'): All(str, Url()),
Required('email'): All(str, Email())
})
Run Code Online (Sandbox Code Playgroud)
看看源代码,我看到妖娆有一个内置的Url功能,在电子邮件的情况下它没有,所以我想建立我自己的,问题是我不知道要调用这个功能在架构内部.
说我有一个值列表:
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,所以如果在同一距离有正值和负值,我怎么能总是得到正值?