我有两个Python字典,我想编写一个返回这两个字典的表达式,合并.update()
如果它返回结果而不是就地修改dict,那么该方法将是我需要的.
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = x.update(y)
>>> print(z)
None
>>> x
{'a': 1, 'b': 10, 'c': 11}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得最终合并的词典z
,不是x
吗?
(要清楚的是,最后一次胜利的冲突处理dict.update()
也是我正在寻找的.)
我正在围绕另一个定义bash函数的软件包开发一些便利包装器.我想用我自己的同名函数替换他们的bash函数,同时仍然能够从我的内部运行他们的函数.换句话说,我需要重命名它们的函数,或者为它创建某种持久化别名,当我创建同名函数时不会修改它.
举一个我不希望工作的天真尝试的简短例子(事实上并非如此):
$ theirfunc() { echo "do their thing"; }
$ _orig_theirfunc() { theirfunc; }
$ theirfunc() { echo "do my thing"; _orig_theirfunc }
$ theirfunc
do my thing
do my thing
do my thing
...
Run Code Online (Sandbox Code Playgroud)
显然我不想要无限递归,我希望:
do my thing
do their thing
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我很惊讶这个问题没有出现.在网上找不到多少.
使用Entry.objects.latest('created_at')
我可以恢复所有Entry对象的最新条目,但是如果我想要每个用户的最新条目?这类似于SQL最新记录查询.但是我如何使用ORM实现这一目标?这是我的方法,我想知道它是否是最有效的方式来做我想要的.
首先,我执行子查询:对象按用户分组,并为每个用户返回Max(最新)created_by字段(created_at__max)然后根据子查询中的结果过滤Entry对象并获取所需对象.
Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
Run Code Online (Sandbox Code Playgroud)
或使用经理:
class UsersLatest(models.Manager):
def get_query_set(self):
return super(UsersLatest,self).get_query_set().filter(created_at__in=self.model.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?可能没有子查询?
谢谢,
保罗
我正在编写一个Python实用程序,需要解析一个我无法控制的大型,定期更新的CSV文件.该实用程序必须在只有Python 2.4可用的服务器上运行.CSV文件根本不引用字段值,但csv库的Python 2.4版本似乎没有给我任何关闭引用的方法,它只允许我设置引号字符(dialect.quotechar = '"'
或其他).如果我尝试将引号字符设置为None
空字符串,则会出现错误.
我可以通过设置dialect.quotechar
一些"稀有"字符来解决这个问题,但这很脆弱,因为没有ASCII字符我绝对可以保证不会出现在字段值中(除了分隔符,但如果我设置dialect.quotechar = dialect.delimiter
,那么事情就会发生)可以预见的乱七八糟的.
在Python 2.5及更高版本中,如果我设置dialect.quoting
为csv.QUOTE_NONE
,则CSV阅读器会尊重它,并且不会将任何字符解释为引用字符.有没有办法在Python 2.4中复制此行为?
更新:感谢Triptych和Mark Roddy帮助缩小问题范围.这是一个最简单的案例演示:
>>> import csv
>>> import StringIO
>>> data = """
... 1,2,3,4,"5
... 1,2,3,4,5
... """
>>> reader = csv.reader(StringIO.StringIO(data))
>>> for i in reader: print i
...
[]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
_csv.Error: newline inside string
Run Code Online (Sandbox Code Playgroud)
只有在行的最后一列中有一个双引号字符时才会出现此问题.不幸的是,我的数据集中存在这种情况.我接受了Tanj的解决方案:手动指定一个非打印字符("\x07" …
首先,我不是网络编程.我碰到了django并且读了一些关于模特的内容.我对以下代码感兴趣(来自djangoproject.com):
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __str__(self):
# Note use of django.utils.encoding.smart_str() here because
# first_name and last_name will be unicode strings.
return smart_str('%s %s' % (self.first_name, self.last_name))
Run Code Online (Sandbox Code Playgroud)
根据我对python的理解,first_name和last_name是类变量,对吗?如何在代码中使用(因为我猜设置Person.first_name或Person.last_name会影响所有Person实例)?为什么这样使用?
我正在两个表之间进行数据迁移(拆分相关表).现有的表是reminders
,它有一个start
列和一个新添加的dateset_id
列,指向一个新dateset
表,该表也有一start
列.对于每一行reminders
,我想要INSERT
一个新的行,dateset
其中start
复制的值,以及带有新插入的ID UPDATE
的相应行.reminders
dateset
这是我试过的SQL:
WITH inserted_datesets AS (
INSERT INTO dateset (start)
SELECT start FROM reminder
RETURNING reminder.id AS reminder_id, id AS dateset_id
)
UPDATE reminder
SET dateset_id = ids.dateset_id
FROM inserted_datesets AS ids
WHERE reminder.id = ids.reminder_id
Run Code Online (Sandbox Code Playgroud)
我收到一个错误missing FROM-clause entry for table "reminder"
,因为我reminder.id
在RETURNING
子句中包含了列,但实际上没有为插入选择它.这是有道理的,但我无法弄清楚如何修改查询以执行我需要的操作.我缺少一种完全不同的方法吗?
我有一张表,我希望能够提供"排名为Y的Y"数据.特别是,我希望能够以相对有效的方式呈现单个行的数据(即,不选择表中的每一行).排名本身很简单,它是表中单个列的直接ORDER BY.
Postgres似乎在这方面提出了一些独特的挑战; AFAICT它没有RANK或ROW_NUMBER或等效功能(至少在8.3,我暂时坚持).邮件列表档案中的规范答案似乎是创建一个临时序列并从中进行选择:
test=> create temporary sequence tmp_seq;
CREATE SEQUENCE
test=*> select nextval('tmp_seq') as row_number, col1, col2 from foo;
Run Code Online (Sandbox Code Playgroud)
当我想从表中选择一行时,似乎这个解决方案仍然没有帮助(我想通过PK选择它,而不是按等级选择).
我可以对一个单独的列进行非规范化并存储排名,这使得数据显得微不足道,但只是重新定位我的问题.UPDATE不支持ORDER BY,所以我不确定如何构造UPDATE查询来设置排名(没有选择每一行并为每一行运行单独的UPDATE,这似乎是对DB活动的过多每次排名需要更新时触发).
我错过了一些明显的东西吗 什么是正确的方法呢?
编辑:显然我不够清楚.我知道OFFSET/LIMIT,但我不知道它如何帮助解决这个问题.我不是要选择排序第X的项目,我试图选择一个任意项目(通过它的PK,比如说),然后能够向用户显示类似"在312中排名第43位"的内容.
如何在django的trunk版本中通过查询创建简单的组?
我需要类似的东西
SELECT name
FROM mytable
GROUP BY name
Run Code Online (Sandbox Code Playgroud)
实际上我想要做的只是获取具有不同名称的所有条目.
python ×5
django ×4
postgresql ×2
sql ×2
bash ×1
csv ×1
dictionary ×1
function ×1
merge ×1
ranking ×1