我的模型看起来像这样:
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做到这一点?我试图在文档中找到它,但似乎不完整.
我有一个这样的字典:
{ "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)
订单并不重要.
我在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来做.
你有没有在Flask中获得的bottle.py等效的上下文处理器?
我有按字母顺序描述一系列字符的字符串,由两个用连字符分隔的字符组成.我想将它们扩展为一个单独的字符列表,如下所示:
'a-d' -> ['a','b','c','d']
'B-F' -> ['B','C','D','E','F']
Run Code Online (Sandbox Code Playgroud)
在Python中执行此操作的最佳方法是什么?
我试图弄清楚为什么以下 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) 假设我有一个Person类,具有first,middle和last name属性.我希望能够对Person对象执行两种不同类型的相等性检查:
我一直在考虑使用__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)