我有一个set包含对象__hash__和__eq__方法的Python ,以确保集合中不包含任何重复项.
我需要对这个结果进行json编码set,但是将一个空值传递set给该json.dumps方法会引发一个问题TypeError.
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: set([]) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一个json.JSONEncoder具有自定义default方法的类的扩展,但我甚至不确定从哪里开始转换set.我应该set使用默认方法中的值创建字典,然后返回编码吗?理想情况下,我想使默认方法能够处理原始编码器所扼杀的所有数据类型(我使用Mongo作为数据源,所以日期似乎也引发了这个错误)
任何暗示正确的方向将不胜感激.
编辑:
谢谢你的回答!也许我应该更精确.
我在这里使用(和upvoted)答案来解决set被翻译的限制,但是内部键也是一个问题.
这些对象set是转换为的复杂对象__dict__,但它们本身也可以包含其属性的值,这些值可能不适用于json编码器中的基本类型.
这里有很多不同的类型set,哈希基本上计算了实体的唯一ID,但是在NoSQL的真正精神中,没有确切知道子对象包含的内容.
一个对象可能包含日期值 …
我相信这个问题的答案将是一个非常明显的字符编码问题......
我在命令行上使用curl来测试python应用程序中的一些端点.端点采用纬度和经度的url参数.没什么特别的.我输入命令:
curl -v -L http://localhost:5000/pulse/?lat=41.225&lon=-73.1
Run Code Online (Sandbox Code Playgroud)
服务器响应,具有详细的卷曲输出:
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /pulse/?lat=41.225 HTTP/1.1
> User-Agent: curl/7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
> Host: localhost:5000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 500 INTERNAL SERVER ERROR
< Content-Type: application/json
< Content-Length: 444
< Server: Werkzeug/0.8.1 Python/2.7.2+
< Date: Wed, 01 Feb 2012 17:06:29 GMT
<
{
"msg": "TypeError: float() argument must be a string or a number",
"flag": …Run Code Online (Sandbox Code Playgroud) 在这里理解正确的方法有些困难.
我有一个与三个成员(标准主从奴隶)的mongodb副本集的连接.当主人保持一致时,一切都正常.
pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当副本集主要降低时,这会开始抛出一个自动连接异常,即使在选择了新的主节点之后该异常也不会消失.
现在我知道需要捕获和处理这个异常,最有可能是等待新的主要选举.我遇到的问题似乎是,一旦选择了新的小学,它根本就不在乎.这个"主人已经改变"的例外情况不断涌现.
打印连接__dict__显示所有三个主机.
我已经尝试将replicasetkwarg 传递给连接,但这是一个意想不到的争论.
有没有理由说这种连接不会只是开始查询新的主要?
编辑:
现在显然在部署服务器上也出现了同样的问题.如果主服务器完全更改,则抛出自动连接异常,即使在选择新的主服务器之后也不会消失.
Pymongo是2.2版和mongodb版2.0.2.更改pymongo代码(mongouri与主机列表)中定义连接的方式无效.恢复服务的唯一方法是rs.stepDown()其他主机,直到原始主服务器再次成为主服务器.
想知道是否有其他人在使用PHP 5.3使用新的命名空间类功能时遇到了这个问题.
我正在使用一个单独的类生成一个动态类调用,用于在我的应用程序中定义用户类型.基本上类定义器采用类型的整数表示并解释它们,返回包含要被调用的类名的字符串作为该用户的模型.
我有一个用户类型的对象模型,在全局范围内定义了该名称,但我在Editor命名空间中为用户编辑器创建了另一个具有相同名称的对象.出于某种原因,PHP不允许我按如下方式进行命名空间动态调用.
$definition = Definer::defineProfile($_SESSION['user']->UserType);
new \Editor\$definition();
Run Code Online (Sandbox Code Playgroud)
相同的语法适用于在全局命名空间中调用全局基本对象模型,并且我在整个应用程序中以可靠的方式使用它.
$definition = Definer::defineProfile($_SESSION['user']->UserType);
new $definition();
Run Code Online (Sandbox Code Playgroud)
这将正确调用动态所需的类.
有没有理由说这两个会有不同的行为,或者在这个庄园中没有实现动态调用命名空间,因为这是一个新功能?是否有另一种方法从另一个命名空间动态调用一个类而不显式地将其名称放在代码中,而是从变量中?
我有一个字符串键和浮点值的字典.
mydict = {}
mydict["joe"] = 20
mydict["bill"] = 20.232
mydict["tom"] = 0.0
Run Code Online (Sandbox Code Playgroud)
我想过滤字典只包含值大于零的对.
在C#中,我会做这样的事情:
dict = dict.Where(r=>r.Value > 0);
Run Code Online (Sandbox Code Playgroud)
Python中的等效代码是什么?
我们假设我有一个名为的python包bestpackage.
惯例规定,bestpacakge也可以是一个目录,sys.path其中包含一个 __init__.py使解释器假设可以从中导入的目录.
有什么办法可以为包名设置一个变量,这样可以将目录命名为与我导入它的指令不同的东西吗?有没有办法让namespacing不关心目录名称,而是尊重其他配置?
我的超级时尚客户端开发人员非常喜欢这些性感的something.otherthing.js项目名称,我们的一个较小的项目!
编辑:
为了澄清,我的问题的主要目的是允许我的客户端人员继续使用他们现有的约定(some.app.js)调用他们的"项目"(我们都添加到我们的路径中)目录中的目录,即使在某些情况下,它们实际上是python包,它们将在路径上并在import内部源自语句.我意识到这实际上是一件非常糟糕的事情,所以我出于好奇而要求更多.因此,这里的一个重大问题是规避了.目录名称(以及假定的包名称)意味着属性访问这一事实.这不能让我感到惊讶,这无法解决,我只是好奇是否有可能在导入背后的"魔法"更深层次.
这里有一些很好的响应,但都依赖于进行某种经典导入,其中属性访问器.将与目录名冲突.
假设我有一个带有比率属性为浮点数的文档的集合.
{'ratio':1.437}
Run Code Online (Sandbox Code Playgroud)
如何编写查询以查找具有与给定整数最接近的值的单个文档,而不使用驱动程序将它们全部加载到内存中并找到具有最小值的abs(x-ratio)?
今天我正在解析一个目录索引,其中包含使用BeautifulSoup压缩文件的路径列表,并且遇到了一件有趣的事情.让我们假设我想获取href我得到的标签的所有属性并将它们直接放入队列中:
q = Queue.Queue()
[q.put(tag['href']) for tag in soup.findAll('a')]
Run Code Online (Sandbox Code Playgroud)
我从来没有碰到这样的情况,在此之前可以使用内联而不将其分配给任何东西,只是通过一些例程调用生成另一个迭代器.这被认为是不好的做法吗?它本身就是"pythonic"吗?是否有更好的单行将所有项目放入队列?
假设我有一个带有以下设置的案例类:
case class Place(id:java.util.UUID, name:String)
Run Code Online (Sandbox Code Playgroud)
我可以为这种类型编写一个(working!)序列化器,如下所示:
class placeSerializer extends CustomSerializer[Place]( format => (
{
case JObject(JField("id", JString(s)) :: JField("name",JString(x)) :: Nil ) =>
Place(UUID.fromString(s), x)
},
{
case x:Place =>
JObject(
JField("id", JString(x.id.toString())) ::
JField("name", JString(x.name)) :: Nil)
}
)
)
Run Code Online (Sandbox Code Playgroud)
但假设我的case类最终有更多的字段,这可能导致我用AST枚举对象的整个结构,创建一些非常详细的东西来编码基元.
json4s似乎具有只能在特定字段上起作用的字段序列化程序,其中包含样板方法以轻松转换名称和丢弃字段.然而,这些对他们的以下签名serialize和deserialize部分功能:
case class FieldSerializer[A: Manifest](
serializer: PartialFunction[(String, Any), Option[(String, Any)]] = Map(),
deserializer: PartialFunction[JField, JField] = Map()
)
Run Code Online (Sandbox Code Playgroud)
由于JField(代表键的类型 - >来自json的val)是它自己的类型而不是它的子类JValue,我如何组合这两种类型的序列化器来正确地将id键的名称编码为a UUID,同时保持默认处理其他字段(原始数据类型).
基本上我想要一个理解其中的字段的格式链Place是一个UUID,而不必为所有DefaultFormats已经处理的字段指定AST结构. …
使用Express js编写一个简单的NodeJS Web服务.我是历史上一个蟒蛇人.
在像Django或Flask这样的框架中,通常看到Python装饰器只用于在特定端点上实现插件的逻辑.这里可以看到这种模式的一个例子.
http://pythonhosted.org/Flask-Classy/#using-multiple-routes-for-a-single-view
我正在开发一个Express中间件,并且使用app.use3奇偶校验功能使一切运行良好,但这仅适用于每个请求的逻辑执行.我想允许插件的最终用户仅在特定端点上运行我的逻辑包(已经在单独的函数中),类似于上面源中概述的模式.
这些包装器的一些配置将在app start处传递.
最好的办法是什么?我应该使用将实际路由处理程序作为参数并在结束时返回的函数来模拟此模式吗?像这样的东西?
function pluginWrapper(endptFunc){
//plugin logic here
return endptFunc;
}
app.get('/endpt', pluginWrapper(function(req,res,next){
//endpt logic here
res.end()
}));
Run Code Online (Sandbox Code Playgroud)