我正在处理一个JSON结构,它以这样的结构输出给我:
[{u'item': u'something',
u'data': {
u'other': u'',
u'else':
[
{
u'more': u'even more',
u'argh':
{
...etc..etc
Run Code Online (Sandbox Code Playgroud)
如您所见,这些是嵌套的dicts和列表.有很多关于递归地扁平这些的讨论,但是我还没有找到一个可以处理字典列表的字典,这些字典又可以包含列表字典,列表列表,字典字典等; 深度不详!在某些情况下,深度可能高达100左右.到目前为止我一直在尝试这个没有太多运气(python 2.7.2):
def flatten(structure):
out = []
for item in structure:
if isinstance(item, (list, tuple)):
out.extend(flatten(item))
if isinstance(item, (dict)):
for dictkey in item.keys():
out.extend(flatten(item[dictkey]))
else:
out.append(item)
return out
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
更新 这几乎是有效的:
def flatten(l):
out = []
if isinstance(l, (list, tuple)):
for item in l:
out.extend(flatten(item))
elif isinstance(l, (dict)):
for dictkey in l.keys():
out.extend(flatten(l[dictkey]))
elif isinstance(l, (str, int, unicode)):
out.append(l)
return out
Run Code Online (Sandbox Code Playgroud) 我有n个数字列表.我想确保每个列表包含该特定列表的唯一元素.即其余任何一个都没有"共享"重复.
这对于两个列表来说非常容易,但是对于n个列表来说有点棘手.
e.g.
mylist = [
[1, 2, 3, 4],
[2, 5, 6, 7],
[4, 2, 8, 9]
]
Run Code Online (Sandbox Code Playgroud)
变为:
mylist = [
[1, 3],
[5, 6, 7],
[8, 9]
]
Run Code Online (Sandbox Code Playgroud) 我有一些巨大的未排序 ID 文件,例如:
file1.txt
a1
a2
a3...etc
file2.txt
b1
a2
c1...etc
Run Code Online (Sandbox Code Playgroud)
我试图最终把它们放在一个单独的、排序的文件中。它们每个都有多个 GB,因此我无法将它们全部加载到内存中。
我当前的解决方案是根据每个 ID 的第一个字符遍历每个文件并将行保存到新文件。这将创建一个可能包含 26 个文件的目录,每个字母对应一个文件。然后,我可以稍后合并这些文件,因为每个字母的文件都可以加载到内存中。这假设 ID 的第一个字符按字母顺序均匀分布:
outputs = {}
for filename in listdir(directory):
with open(filename) as f:
for line in f:
if line[0] not in outputs:
outputs[line[0]] = open('sorted_' + line[0] + '.txt', 'w')
outputs[line[0]].write(line)
_ = [v.close() for v in outputs.itervalues()]
(then sort individually and concat the newly categorized files)
Run Code Online (Sandbox Code Playgroud)
我的问题是:新的 26 个文件中有多少内容保存在内存中?它是立即写入文件,还是仅在关闭后才真正写入?
我注意到通常如果我cat在另一个终端窗口中创建文件,它实际上并不包含您想要写入的内容,直到.close()被调用。但是它们可以保存在一个临时文件中,我不确定。
这是否只是将所有内容都保存在内存中,因此效率极低?
有没有人有使用经验directoryperdb?我找不到很多它的用法示例,并希望先通过一些知识渊博的人来运行我的思维过程:)
我有一个近TB的数据库,并希望在另一个硬盘上添加另一个.我不能搞砸它,因为重新整合我的数据需要几个小时.
我目前有:
--dbpath 如 /home/mongo /hd/newhd我的流程如下:
old和新的数据库new.mkdir /home/mongo/oldmv /home/mongo/* /home/mongo/old//home/mongo/new到/hd/newhd/newmongodbvim /etc/mongod.conf 〜并设定 directoryperdb = truenew这看起来不错吗?它会自动识别新文件夹并继续正常吗?
EDIT1:根据这个:https://groups.google.com/forum/?fromgroups=#!topic/mongodb-commits/frAjIDG08Mc的mongod.lock文件应该是/home/mongo.日志或_tmp目录怎么样?
目前,我的烧瓶应用程序在本地运行:
如何为我的应用创建本地自定义位置,例如:
有点像本地域名.这有可能吗?任何指针都会很棒.
我有这样的XML结构:
mytree = """
<path>
<to>
<nodes>
<info>1</info>
<info>2</info>
<info>3</info>
</nodes>
</to>
</path>
"""
Run Code Online (Sandbox Code Playgroud)
我目前正在使用python lxml中的xpath来获取节点:
>>> from lxml import etree
>>> info = etree.XML(mytree)
>>> print info.xpath("/path/to/nodes/info")
[<Element info at 0x15af620>, <Element info at 0x15af940>, <Element info at 0x15af850>]
>>> for x in info.xpath("/path/to/nodes/info"):
print x.text
1
2
3
Run Code Online (Sandbox Code Playgroud)
这是伟大的,但有没有抢到一个更清洁的方式只是内部的文本作为一个列表,而不是在事后写for循环?
就像是:
print info.xpath("/path/to/nodes/info/text")
Run Code Online (Sandbox Code Playgroud)
(但这不起作用)
我正在尝试设置MongoVUE以连接到运行MongoDB的联网服务器.我可以很容易地通过Putty中的SSH或在Windows命令行中使用mongo ip:port连接到它.
但是,当通过MongoVUE的SSH隧道建立连接时,我收到错误:
Unable to connect to server 127.0.0.1:5252: No connection could be made because the target machine actively refused it 127.0.0.1:5252.
Run Code Online (Sandbox Code Playgroud)
所以我假设防火墙配置有问题.
但是,我的/ etc/sysconfig/iptables包含以下行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
还有什么可以让这个连接?
这是MongoVue SSH配置:

假设我有一本字典:
myDict = {
'title': 'a nice title',
'nice_list': [1,2,3,4,5,6,6,7,...,99999],
'nice_lists_last_item': 99999,
}
Run Code Online (Sandbox Code Playgroud)
nice_list如果项目大于最终项目,我只想附加一个项目.
什么是更快:
if new_element > nice_list[-1]要么
if new_element > nice_lists_last_item方法1是否必须扫描整个列表(和/或nice_list每次都将所有内容放入内存中)才能找到该项目?哪个更快?(记住我打算做几十亿次这些比较?)
方法2将最后一个元素存储为自己独特的dict条目,那么更快吗?
我正在将SQLite数据库转换为MySQL,因此我可以将其导入PHPMyAdmin.这应该是直截了当的.我将它导出到转储,更改了自动增量并将所有双引号更改为反引号.这是生成的文件的开头看起来像:
DROP TABLE IF EXISTS `chars`;
CREATE TABLE chars(
charid INTEGER PRIMARY KEY AUTO_INCREMENT,
character TEXT
);
INSERT INTO `chars` VALUES(3,'a');
INSERT INTO `chars` VALUES(4,'b');
Run Code Online (Sandbox Code Playgroud)
...当尝试导入PHPMyAdmin时,它会抛出此错误.
Run Code Online (Sandbox Code Playgroud)Error SQL query: CREATE TABLE chars( charid INTEGER PRIMARY KEY AUTO_INCREMENT , CHARACTER TEXT ); MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'character TEXT )' at line 3
缩进线后面是否有太多空间?我将"format"选项保留为"SQL",将SQL兼容模式保留为NONE,并选中"不要将AUTO_INCREMENT用于零值".它将用于django网络应用程序.
包含平假名和片假名unicode字符的示例字符串:
myString = u"Eliminate ???? non-alphabetic ???? characters"
Run Code Online (Sandbox Code Playgroud)
根据以下内容匹配两个范围的模式:http: //www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml
myPattern = u"[\u3041-\u309f]*|[\u30a0-\u30ff]*"
Run Code Online (Sandbox Code Playgroud)
简单的Python正则表达式替换功能
import re
print re.sub(myPattern, "", myString)
Run Code Online (Sandbox Code Playgroud)
返回:
Eliminate non-alphabetic ???? characters
Run Code Online (Sandbox Code Playgroud)
我可以让它工作的唯一方法是我分别使用两个范围,一个接一个.什么阻止此RegEx简单地选择| -pipe的两侧?
python文件:
# -*- coding: utf-8 -*-
print u"?"
print [u"?".encode('utf8')]
Run Code Online (Sandbox Code Playgroud)
生产:
?
['\xe3\x80\x82']
Run Code Online (Sandbox Code Playgroud)
为什么python使用3个字符来存储我的1个fullstop?这真的很奇怪,如果你单独打印每一个,它们也都是不同的.有任何想法吗?
我最近提出了这个问题,但我不是很擅长编写递归函数.你会如何解决它?
您的公司结构如下:
# employee: manager
company = {
'17': '15',
'16': '15',
'10': '5',
'15': '10',
'5': '4',
'4': 'NULL'
}
Run Code Online (Sandbox Code Playgroud)
每个号码都是该人的身份.由于没有经理,第4人是CEO并且具有NULL值.你怎么能写一个reportsTo(eid, mid)返回的递归函数:
reportsTo('17', '4') - > TruereportsTo('15', '16') - > False