小编Bil*_*one的帖子

是否可以同时为dict对象中的多个键分配相同的值?

在Python中,我需要一个字典对象,如下所示:

{'a': 10, 'b': 20, 'c': 10, 'd': 10, 'e': 20}
Run Code Online (Sandbox Code Playgroud)

我已经能够通过组合dict.update()和如下dict.fromkeys()功能成功地获得这个:

myDict = {}
myDict.update(dict.fromkeys(['a', 'b', 'c'], 10))
myDict.update(dict.fromkeys(['b', 'e'], 20))
Run Code Online (Sandbox Code Playgroud)

但是,因为代码是为有时需要添加键/值的新手用户编写的,所以我更喜欢简单的简单(Perl-like)语法,例如:

myDict = {}
myDict['a', 'c', 'd'] = 10
myDict['b', 'e'] = 20
Run Code Online (Sandbox Code Playgroud)

然而,这给了我:

myDict = {('a', 'c', 'd'): 10, ('b', 'e'): 20}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以进一步简化我的第一个例子(使用dict.update()dict.fromkeys()),并获取我正在寻找的dict对象?

或者,或者,如果我在第二个例子中有一个带有元组的字典,那么我是否可以轻松地进行查找,例如myDict['c']myDict.get('c')获取值10?

python syntax dictionary

44
推荐指数
5
解决办法
6万
查看次数

为什么Django REST Framework提供不同的身份验证机制

为什么Django REST Framework实现了与内置Django机制不同的身份验证机制?

也就是说,可以配置两个设置类:

  1. settings.AUTHENTICATION_BACKENDS 它处理Django级别的身份验证,以及
  2. settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] 在REST-Framework级别进行身份验证

我遇到的问题是我有一个中间件层来检查用户是否登录.

使用通过会话进行身份验证的Web客户端时,这很好用.但是,从移动设备或运行测试套件(即使用HTTP标头和令牌进行身份验证)时,中间件会将用户检测为AnonymousUser,但是当我们到达REST Framework层时,Authorization会读取HTTP 标头,并且用户是登录.

为什么这些都不会在中间件之前发生?此外,为什么REST Framework的身份验证方法不依赖于Django身份验证后端?

authentication django restful-authentication django-rest-framework

15
推荐指数
1
解决办法
3655
查看次数

如何在Django中创建不区分大小写的数据库索引?

我正在使用Django创建一些数据库表,如下所示:

class MetadataTerms(models.Model):
    term = models.CharField(max_length=200)
    size = models.IntegerField(default=0)
    validity = models.IntegerField(default=0, choices=TERM_VALIDITY_CHOICES)
Run Code Online (Sandbox Code Playgroud)

然后我运行查询查询,以term不区分大小写的方式找到正确匹配的相应行.例如:

MetadataTerms.objects.filter(term__iexact=search_string, size=3)
Run Code Online (Sandbox Code Playgroud)

这个查找子句转换为SQL中的类似内容:

 SELECT "app_metadataterms"."id", "app_metadataterms"."term", "app_metadataterms"."size" FROM "app_metadataterms" WHERE (UPPER("app_metadataterms"."term"::text) = UPPER('Jack Nicklaus survives')  AND "app_metadataterms"."size" = 3 );
Run Code Online (Sandbox Code Playgroud)

在Postgres上,我可以EXPLAIN对上面的内容进行查询,我得到了这个查询计划:

                                    QUERY PLAN
-----------------------------------------------------------------------------------
 Seq Scan on app_metadataterms  (cost=0.00..1233.01 rows=118 width=21)
   Filter: ((size = 3) AND (upper((term)::text) = 'JACK NICKLAUS SURVIVES'::text))
Run Code Online (Sandbox Code Playgroud)

由于该term字段未编制索引,并且未按案例规范化方式编制索引,因此上述查询需要跨所有数据库行执行慢速Seq [uential] Scan操作.

然后我插入一个简单的case-normalized索引,例如:

 CREATE INDEX size_term_insisitive_idx ON app_metadataterms (upper(term), size);
Run Code Online (Sandbox Code Playgroud)

上面的查询现在运行速度提高了大约6倍:

                                         QUERY PLAN
---------------------------------------------------------------------------------------------
 Bitmap Heap Scan on …
Run Code Online (Sandbox Code Playgroud)

database django indexing model django-models

12
推荐指数
3
解决办法
1974
查看次数

捕获由Makefile启动的后台进程的PID

我有一个启动Django Web服务器的Makefile.我希望服务器在后台启动,PID保存到文件中.

我的食谱看起来像这样:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80
Run Code Online (Sandbox Code Playgroud)

直观地说,要构建进程并捕获PID,我必须做这样的事情:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid"
Run Code Online (Sandbox Code Playgroud)

但这不起作用.使用时,'make'使用的子shell(在我的情况下是/ bin/sh)可以正常工作:

<command> &
Run Code Online (Sandbox Code Playgroud)

...后台进程,并在使用时工作:

<command> ; <command>
Run Code Online (Sandbox Code Playgroud)

(或<command> && <command>等等)链式命令.但是,当我尝试后台第一个进程并链接第二个进程时,我收到以下错误:

/bin/sh: -c: line 0: syntax error near unexpected token `;'

在Makefile中处理进程并捕获PID的最佳方法是什么?

谢谢
- B

shell makefile sh background-process

7
推荐指数
1
解决办法
4492
查看次数

是否可以在 git 中禁用“危险”命令行选项?

按照习惯,我会经常修改我的 repo,并使用一次添加/提交它 git commit -am 'my commit message'

有时我只想添加几个修改过的文件,所以我会发出准备git add命令来精心设置我的暂存区,并将准备提交的更改与半生不熟的更改分开。

然后,我会git commit -am '...'像往常一样发出相同的命令来完成整个事情。

有没有办法让我禁用该git commit -a选项,和/或在我使用-a开关时发出警告?我想训练自己摆脱这种粗略的习惯......

git git-config

5
推荐指数
1
解决办法
1155
查看次数

Python类属性可以添加吗?

我有一个具有以下类结构的项目:

class A(object):
    elems = [1, 2, 3]

class B(A):
    pass

class C(B):
    elems = [20, 100]

class D(B):
    elems = [4, 5]
Run Code Online (Sandbox Code Playgroud)

目前,Python的默认继承行为是覆盖elems每个后续属性声明中的属性,例如:

A.elems == [1, 2, 3]
B.elems == [1, 2, 3]
C.elems == [20, 100]
D.elems == [4, 5]
Run Code Online (Sandbox Code Playgroud)

我希望能够访问这些值的附加列表.换句话说,我希望能够检索以下列表:

A.collated() == [1, 2, 3]
B.collated() == [1, 2, 3]
C.collated() == [1, 2, 3, 20, 100]
D.collated() == [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.任何帮助将不胜感激.

在此先感谢,
- B.

python inheritance list

0
推荐指数
1
解决办法
135
查看次数