Dhr*_*awa 9 python shell dictionary namespaces dictionary-comprehension
我正在尝试使用key as name和value 创建一个dict 作为相应的User对象.
我从Django shell包装器使用Python shell python manage.py shell:
>>> from django.contrib.auth.models import User
>>> names = ['carl', 'jim', 'jack', 'john', 'mark']
# Now using some dict comprehension
>>> u = {name: User.objects.get(username=name) for name in names}
NameError: global name 'User' is not defined
但是,这对我有用:
u = {}
for name in names:
    u[name] = User.objects.get(username=name)
我得到了所需的输出,即:
{ 
  'carl': <User: carl>,
  'jack': <User: jack>,
  'jim' : <User: jim>,
  'john': <User: john>,
  'mark': <User: mark>
}
我知道,还有其他方法可以实现这一点,但我很好奇为什么dict理解不能在这里工作.
有小费吗?
我在这里错过了什么吗?
我相信python 的问题跟踪器是您的最佳答案。
简而言之:它在 shell 中不起作用。这同样适用于 shell 中的函数定义。那里无法进口。
针对你的问题我建议:
names = [...]
users = User.objects.filter(username__in=names)
name_to_user = {user.username: user for user in users}
它执行一个 sql 查询而不是len(names).
| 归档时间: | 
 | 
| 查看次数: | 2542 次 | 
| 最近记录: |