Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重复数据消除和重新排序字典_Python_Django - Fatal编程技术网

Python 重复数据消除和重新排序字典

Python 重复数据消除和重新排序字典,python,django,Python,Django,假设我们有一个基本模型 class Log(models.Model): key = fields.BigInteger() calldate = fields.DateTimeField() followupdate = fields.DateTimeField() 同一密钥可以设置多个followupdates。我想做的是在列表中显示最近按calldate计划的后续行动 在我看来,我有以下几点: views.py 我需要的帮助是按照followupdate键对字典r

假设我们有一个基本模型

class Log(models.Model):
    key = fields.BigInteger()
    calldate = fields.DateTimeField()
    followupdate = fields.DateTimeField()
同一密钥可以设置多个followupdates。我想做的是在列表中显示最近按calldate计划的后续行动

在我看来,我有以下几点:

views.py

我需要的帮助是按照followupdate键对字典results进行重新排序。在每个字典中都有这样一个键:“followupdate”:datetime.date2013,3,25这是我需要重新排序的

.sort似乎是这样工作的-

l.sort(key=lambda item:item['followupdate'], reverse=True)
测试用例-

>>> l = [{'followupdate': datetime.date(2013, 3, 25)}, {'followupdate': datetime.date(2013, 3, 24)}, {'followupdate': datetime.date(2013, 3, 29)}]
>>> l
[{'followupdate': datetime.date(2013, 3, 25)}, {'followupdate': datetime.date(2013, 3, 24)}, {'followupdate': datetime.date(2013, 3, 29)}]
>>> l.sort(key=lambda item:item['followupdate'], reverse=True)
>>> l
[{'followupdate': datetime.date(2013, 3, 29)}, {'followupdate': datetime.date(2013, 3, 25)}, {'followupdate': datetime.date(2013, 3, 24)}]
.sort似乎是这样工作的-

l.sort(key=lambda item:item['followupdate'], reverse=True)
测试用例-

>>> l = [{'followupdate': datetime.date(2013, 3, 25)}, {'followupdate': datetime.date(2013, 3, 24)}, {'followupdate': datetime.date(2013, 3, 29)}]
>>> l
[{'followupdate': datetime.date(2013, 3, 25)}, {'followupdate': datetime.date(2013, 3, 24)}, {'followupdate': datetime.date(2013, 3, 29)}]
>>> l.sort(key=lambda item:item['followupdate'], reverse=True)
>>> l
[{'followupdate': datetime.date(2013, 3, 29)}, {'followupdate': datetime.date(2013, 3, 25)}, {'followupdate': datetime.date(2013, 3, 24)}]

您应该让数据库执行重复数据消除,而不是从数据库中获取记录,然后在Python中丢弃这些记录,这是浪费时间和带宽的

Django的对象关系映射无法做到这一点,但您可以在SQL中这样做:

SELECT L1.*
FROM myapp_log AS L1,
     (SELECT MAX(date) AS maxdate, `key`
      FROM myapp_log GROUP BY `key`) as L2
WHERE L1.date = L2.maxdate
  AND L1.`key` = L2.`key`
  AND L1.followupdate IS NOT NULL
ORDER BY L1.date DESCENDING
字段名键需要引用,因为它是SQL关键字

然后,您可以使用从Django运行此查询,如下所示:

SELECT L1.*
FROM myapp_log AS L1,
     (SELECT MAX(date) AS maxdate, `key`
      FROM myapp_log GROUP BY `key`) as L2
WHERE L1.date = L2.maxdate
  AND L1.`key` = L2.`key`
  AND L1.followupdate IS NOT NULL
ORDER BY L1.date DESCENDING
sql='1〕 从myapp_日志中选择L1.*作为L1, 等等,见上文 ' q=Log.objects.rawsql
您应该让数据库执行重复数据消除,而不是从数据库中获取记录,然后在Python中丢弃这些记录,这是浪费时间和带宽的

Django的对象关系映射无法做到这一点,但您可以在SQL中这样做:

SELECT L1.*
FROM myapp_log AS L1,
     (SELECT MAX(date) AS maxdate, `key`
      FROM myapp_log GROUP BY `key`) as L2
WHERE L1.date = L2.maxdate
  AND L1.`key` = L2.`key`
  AND L1.followupdate IS NOT NULL
ORDER BY L1.date DESCENDING
字段名键需要引用,因为它是SQL关键字

然后,您可以使用从Django运行此查询,如下所示:

SELECT L1.*
FROM myapp_log AS L1,
     (SELECT MAX(date) AS maxdate, `key`
      FROM myapp_log GROUP BY `key`) as L2
WHERE L1.date = L2.maxdate
  AND L1.`key` = L2.`key`
  AND L1.followupdate IS NOT NULL
ORDER BY L1.date DESCENDING
sql='1〕 从myapp_日志中选择L1.*作为L1, 等等,见上文 ' q=Log.objects.rawsql
在Python中,dict是无序的。您可以做的是创建一个键、值的列表,这些元素将被排序。在python中排序和排序是不同的概念吗?如果是的话,也许我只是想排序。在Python中,dict是无序的。您可以做的是创建一个键、值的列表,这些元素将被排序。在python中排序和排序是不同的概念吗?如果是的话,也许我只是想排序。我也推荐这种方法。效率更高。我想使用它,但我对SQL有点太不熟悉,无法编写原始语句。感谢您的回复+1@BrandonBertelsen我建议你开始用SQL把你的手弄脏。ORM破坏了一个。我相信我唯一会使用的SQL足以将整个表拉到Python或R中,在那里真正神奇的发生了。不确定是否值得!这正是我选择Django的原因,因为它可以让我避免弄乱我不知道的事情!我也推荐这种方法。效率更高。我想使用它,但我对SQL有点太不熟悉,无法编写原始语句。感谢您的回复+1@BrandonBertelsen我建议你开始用SQL把你的手弄脏。ORM破坏了一个。我相信我唯一会使用的SQL足以将整个表拉到Python或R中,在那里真正神奇的发生了。不确定是否值得!这正是我选择Django的原因,因为它可以让我避免弄乱我不知道的事情!这工作如预期,但我不得不改变它一点。sortkey=lambda x:x.followupdate,reverse=TrueAh是。我以为是字典。应该是一个对象。这按预期工作,但我必须对其进行一些更改。sortkey=lambda x:x.followupdate,reverse=TrueAh是。我以为是字典。应该是一个对象。