小编Mat*_*ain的帖子

Django休息框架嵌套自引用对象

我的模型看起来像这样:

class Category(models.Model):
    parentCategory = models.ForeignKey('self', blank=True, null=True, related_name='subcategories')
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=500)
Run Code Online (Sandbox Code Playgroud)

我设法用序列化器获得所有类别的平面json表示:

class CategorySerializer(serializers.HyperlinkedModelSerializer):
    parentCategory = serializers.PrimaryKeyRelatedField()
    subcategories = serializers.ManyRelatedField()

    class Meta:
        model = Category
        fields = ('parentCategory', 'name', 'description', 'subcategories')
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是子类别列表具有子类别的内联json表示而不是它们的ID.我怎么用django-rest-framework做到这一点?我试图在文档中找到它,但似乎不完整.

django django-rest-framework

74
推荐指数
10
解决办法
4万
查看次数

在嵌套的python词典和列表中查找所有出现的键

我有一个这样的字典:

{ "id" : "abcde",
  "key1" : "blah",
  "key2" : "blah blah",
  "nestedlist" : [ 
    { "id" : "qwerty",
      "nestednestedlist" : [ 
        { "id" : "xyz",
          "keyA" : "blah blah blah" },
        { "id" : "fghi",
          "keyZ" : "blah blah blah" }],
      "anothernestednestedlist" : [ 
        { "id" : "asdf",
          "keyQ" : "blah blah" },
        { "id" : "yuiop",
          "keyW" : "blah" }] } ] } 
Run Code Online (Sandbox Code Playgroud)

基本上是具有任意深度的嵌套列表,字典和字符串的字典.

遍历此方法以提取每个"id"键的值的最佳方法是什么?我想实现相当于XPath查询,如"// id"."id"的值始终是一个字符串.

所以从我的例子来看,我需要的输出基本上是:

["abcde", "qwerty", "xyz", "fghi", "asdf", "yuiop"]
Run Code Online (Sandbox Code Playgroud)

订单并不重要.

python recursion dictionary traversal

68
推荐指数
8
解决办法
6万
查看次数

比例维恩图超过3套

我在MongoDB中有一组文档,每个文档在列表中都有一个或多个类别.使用map reduce,我可以获得每个独特的类别组合有多少文档的详细信息:

['cat1']               = 523
['cat2']               = 231
['cat3']               = 102
['cat4']               = 72
['cat1','cat2']        = 710
['cat1','cat3']        = 891
['cat1','cat3','cat4'] = 621 ...
Run Code Online (Sandbox Code Playgroud)

其中总数是针对精确组合类别的文档数量.

我正在寻找一种合理的方式来呈现这些数据,我认为具有比例区域的维恩图是个好主意.使用上面的例子,区域cat1将是523 + 710 + 891 + 621,cat1和cat3之间的重叠区域将是891 + 621,cat1,cat3,cat4之间的重叠区域将是621等.

有没有人有任何关于我如何实现这个的提示?我最好喜欢用Python(+ Numpy/MatPlotLib)或MatLab来做.

python matlab plot matplotlib

9
推荐指数
3
解决办法
8429
查看次数

使用Bottle.py在每个页面的模板上下文中包含变量

你有没有在Flask中获得的bottle.py等效的上下文处理器?

python templates bottle flask

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

将字母范围扩展为Python中的字符列表

我有按字母顺序描述一系列字符的字符串,由两个用连字符分隔的字符组成.我想将它们扩展为一个单独的字符列表,如下所示:

'a-d' -> ['a','b','c','d']
'B-F' -> ['B','C','D','E','F']
Run Code Online (Sandbox Code Playgroud)

在Python中执行此操作的最佳方法是什么?

python string character alphabet alphabetical

6
推荐指数
1
解决办法
1789
查看次数

来自向量<string>的c_str()结果在libc++中变成垃圾

我试图弄清楚为什么以下 C++ 代码在 libstdc++ 中运行良好,但在 libc++ 中结果却c_str()变得垃圾。

该代码只是使用 构建一个字符串向量savedstrings.push_back("blah"),并且在将每个字符串添加到该向量后,立即savedstrings.back().c_str()将其添加到一个单独的向量const char*

所以每个const char*应该指向savedstrings向量中相应的字符串。这对于 libstdc++ 来说工作得很好,但是对于 libc++ 来说,随着后面的向量的添加,向量const char*开头的cstrs向量开始变成垃圾。

我不确定我是否明白这里发生了什么。savedstrings添加新字符串时向量是否会移动较早的字符串,从而使c_str()结果无效?我怎样才能阻止这种情况发生?

vector<string> savedstrings;
vector<const char*> cstrs;

for (int i = 0; i < 10; i++) {
  savedstrings.push_back("blah");
  cstrs.push_back(savedstrings.back().c_str());
}

vector<string>::iterator si;
for(si=savedstrings.begin();si!=savedstrings.end();++si)
  cout << *si << endl;

vector<const char*>::iterator ci;
for(ci=cstrs.begin();ci!=cstrs.end();++ci)
  cout << *ci << endl;
Run Code Online (Sandbox Code Playgroud)

c++ string garbage-collection vector

4
推荐指数
1
解决办法
2183
查看次数

在python中实现多种类型的相等性检查的最佳方法

假设我有一个Person类,具有first,middle和last name属性.我希望能够对Person对象执行两种不同类型的相等性检查:

  • 基于所有属性的字符串比较完全相等
  • 不一致,即"G. Bluth"=="George Oscar Bluth"

我一直在考虑使用__eq____ne__单独使用这个:

Person('g', '', 'bluth') == Person('george', 'oscar', 'bluth')  # False
Person('g', '', 'bluth') != Person('george', 'oscar', 'bluth')  # False
Run Code Online (Sandbox Code Playgroud)

这似乎是一个简洁的解决方案,但!=并不总是返回相反的,但==让我感到紧张.这被认为是不好的做法吗?我应该避免使用运算符,只使用类似的方法consistent(self, other)吗?

示例实现:

class Person(object):
    def __init__(self, first, middle, last):
        self.first = first
        self.middle = middle
        self.last = last
    def __eq__(self, other):
        if type(other) is type(self):
            return self.__dict__ == other.__dict__
        return NotImplemented
    def __ne__(self, other):
        if type(other) is type(self):
            return not (self._compatible(self.first, other.first) and …
Run Code Online (Sandbox Code Playgroud)

python oop equality

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