所以我使用的是Python 2.7,使用该json模块对以下数据结构进行编码:
'layer1': {
'layer2': {
'layer3_1': [ long_list_of_stuff ],
'layer3_2': 'string'
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我使用漂亮的打印方式打印出来,如下所示:
json.dumps(data_structure, indent=2)
Run Code Online (Sandbox Code Playgroud)
哪个好,除了我要缩进所有内容,除了内容"layer3_1"- 这是一个列出坐标的大量字典,因此,在每个上面设置一个值使得漂亮的打印创建一个包含数千行的文件,示例如下:
{
"layer1": {
"layer2": {
"layer3_1": [
{
"x": 1,
"y": 7
},
{
"x": 0,
"y": 4
},
{
"x": 5,
"y": 3
},
{
"x": 6,
"y": 9
}
],
"layer3_2": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是类似于以下内容:
{
"layer1": {
"layer2": {
"layer3_1": [{"x":1,"y":7},{"x":0,"y":4},{"x":5,"y":3},{"x":6,"y":9}],
"layer3_2": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我听说可以扩展json模块:是否可以将其设置为仅在"layer3_1"对象内部时关闭缩进?如果是这样,有人请告诉我怎么样?
我有一个Python程序,它运行一系列实验,没有数据打算从一个测试存储到另一个测试.我的代码包含一个我完全无法找到的内存泄漏(我看看内存泄漏的其他线程).由于时间限制,我不得不放弃寻找泄漏,但如果我能够隔离每个实验,程序可能会运行足够长的时间来产生我需要的结果.
具体情况详情
更新
Gnibbler的答案实际上让我发现我的ClosenessCalculation对象存储了每次计算中使用的所有数据都没有被删除.然后我用它来手动删除一些似乎已修复内存问题的链接.
我正在做一些数据修改,如果我可以在内存数据库中粘贴一堆字典,然后对它进行简单的查询,那将会更加简单.
例如,类似于:
people = db([
{"name": "Joe", "age": 16},
{"name": "Jane", "favourite_color": "red"},
])
over_16 = db.filter(age__gt=16)
with_favorite_colors = db.filter(favorite_color__exists=True)
Run Code Online (Sandbox Code Playgroud)
但有三个混淆因素:
那么,这样的事情存在吗?或者我需要一起解决问题吗?
你可以取消引用从idPython函数中检索的变量id 吗?例如:
dereference(id(a)) == a
Run Code Online (Sandbox Code Playgroud)
我想从学术角度来了解; 我知道有更实用的方法.
我是python的新手,并开始使用遗传算法(GA)进行某种曲线拟合.对于那个GA,我使用(真棒)pyevolve库(http://pyevolve.sourceforge.net/),它能够通过使用多处理极大地减少计算时间.
这就是我的问题出现的地方:我想要近似的曲线是一个从excel文件中读取并在程序开头存储为全局变量的数组.使用python多处理模块时,每个进程都使用自己的全局变量创建自己的python实例.这导致每一个人,在每一代算法(意味着每个过程)中一次又一次地打开和读取excel文件.打开大的excel文件会导致大量的时间,因此只需打开一次该文件并使读取数组可供每个进程/个人使用,这将是一件好事.
多处理是在pyevolve库中启动的,我不想更改它以便于更新.不幸的是,这意味着只需通过例如将变量传递给流程池
p = Process(target=my_func,args=(my_array))
对我来说不是一个选择.这是我到目前为止找到的唯一解决方案.
有没有人知道从每个进程访问my_array的另一种方法?
提前致谢!
我想知道是否有可能获得python列表中元素的"指针".这样,我就可以直接访问我的元素,而无需知道我的元素的索引.我的意思是,在列表中,您可以在任何地方添加元素; 在开始,中间或甚至结束时,各个元素不会从其实际存储位置移动.从理论上讲,应该可以这样做:
myList = [1]
[1]
element = &myList[0]
element会在这里充当指针.
myList.insert(0, 0)
myList.append(2)
Run Code Online (Sandbox Code Playgroud)
[0,1,2]
此时,即使列表中的索引已更改,我仍然可以直接访问该元素.
我想这样做的原因是因为在我的程序中,跟踪我添加到列表中的每个项目都太繁琐了.每个项目都由一个对象生成.偶尔,对象必须更新值,但不能保证它将在与添加时相同的索引处找到它的项.有一个指针可以解决问题.我希望这是有道理的.
在Python中做这样的事情的正确方法是什么?
可能重复:
通过id()获取对象?
>>> var = 'I need to be accessed by id!'
>>> address = id(var)
>>> print(address)
33003240
Run Code Online (Sandbox Code Playgroud)
有没有办法使用的地址var在内存中,所提供的id(),用于访问的价值var?
UPD:
我还想说,如果这不能在标准Python中完成,那么它也会很有趣,如果这可以通过黑客攻击C++内部的Python来实现.
UPD2:
知道如何改变价值也会很有趣var.
id内置函数是反向还是反向?我正在考虑使用它来编码和解码字符串,而不需要花费太多时间或像PyCrypto库那样有很多开销.对我的需求非常简单,所以我不想PyCrypto用于简单的编码和解码.
就像是:
>>> id("foobar")
4330174256
>>> reverse_id(4330174256) # some function like this to reverse.
"foobar"
Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个只读对象编写一个类,该类不会真正与copy模块一起复制,并且当它被腌制以在进程之间传输时,每个进程都将维护不超过一个副本,无论如何很多时候它会作为“新”对象传递。已经有这样的东西了吗?
什么<function at 'somewhere'>意思?例:
>>> def main():
... pass
...
>>> main
<function main at 0x7f95cf42f320>
Run Code Online (Sandbox Code Playgroud)
也许有办法以某种方式使用它0x7f95cf42f320?
我一直在使用该dis模块来观察CPython字节码。但是最近,我注意到的某些不便行为dis.dis()。
以这个例子为例:我首先定义一个函数,multiplier其中包含嵌套函数inner:
>>> def multiplier(n):
def inner(multiplicand):
return multiplicand * n
return inner
>>>
Run Code Online (Sandbox Code Playgroud)
然后dis.dis(),我用它来拆卸它:
>>> from dis import dis
>>> dis(multiplier)
2 0 LOAD_CLOSURE 0 (n)
3 BUILD_TUPLE 1
6 LOAD_CONST 1 (<code object inner at 0x7ff6a31d84b0, file "<pyshell#12>", line 2>)
9 LOAD_CONST 2 ('multiplier.<locals>.inner')
12 MAKE_CLOSURE 0
15 STORE_FAST 1 (inner)
4 18 LOAD_FAST 1 (inner)
21 RETURN_VALUE
>>>
Run Code Online (Sandbox Code Playgroud)
如您所见,它反汇编了顶级代码对象。但是,它并没有拆卸inner。它只是表明它创建了一个名为的代码对象,inner并显示了代码对象的默认值(无信息)__repr__()。
有没有办法让我dis.dis() …
如何确定先前在我的Python程序中创建的对象是否仍然存在?通过存在,我的意思是,仍然可以通过我仍然持有参考的其他对象到达.
背景:
我正在尝试使用可能有问题的解析器.解析器返回一个具有递归引用的成员的对象.使用我在网上找到的任何调试转储命令都无法对对象进行pickle或dump.当我逐步完成解析器时,我可以看到一个我以后需要访问的对象.但它看起来好像对象最终没有在解析器返回的对象中实际引用.我想确定我看到在调试器中创建的对象是否在解析器返回的对象中的某个位置可用.
python ×12
pointers ×2
built-in ×1
data-munging ×1
database ×1
dereference ×1
disassembly ×1
function ×1
global ×1
indentation ×1
json ×1
list ×1
memory ×1
memory-leaks ×1
persistence ×1
pickle ×1
pyevolve ×1
recursion ×1
reference ×1
repr ×1
uuid ×1