我有一个数据结构,基本上相当于嵌套字典.让我们说它看起来像这样:
{'new jersey': {'mercer county': {'plumbers': 3,
'programmers': 81},
'middlesex county': {'programmers': 81,
'salesmen': 62}},
'new york': {'queens county': {'plumbers': 9,
'salesmen': 36}}}
Run Code Online (Sandbox Code Playgroud)
现在,保持和创造这个是非常痛苦的; 每当我有一个新的州/县/专业时,我必须通过令人讨厌的try/catch块创建下层词典.而且,如果我想要遍历所有值,我必须创建恼人的嵌套迭代器.
我也可以使用元组作为键,如下:
{('new jersey', 'mercer county', 'plumbers'): 3,
('new jersey', 'mercer county', 'programmers'): 81,
('new jersey', 'middlesex county', 'programmers'): 81,
('new jersey', 'middlesex county', 'salesmen'): 62,
('new york', 'queens county', 'plumbers'): 9,
('new york', 'queens county', 'salesmen'): 36}
Run Code Online (Sandbox Code Playgroud)
这使得迭代值非常简单和自然,但是做聚合和查看字典的子集(例如,如果我只想逐个状态)这样做更具语法上的痛苦.
基本上,有时我想将嵌套字典视为平面字典,有时我想将其视为复杂的层次结构.我可以把它全部包装在一个类中,但似乎有人可能已经完成了这个.或者,似乎可能有一些非常优雅的语法结构来做到这一点.
我怎么能做得更好?
附录:我知道setdefault()但它并没有真正实现干净的语法.此外,您创建的每个子词典仍需要setdefault()手动设置.
numpy.average()有一个权重选项,但numpy.std()没有.有没有人有解决方法的建议?
我有一个包含一组元素的数组.我想把一个给定的元素带到前面,否则保持顺序不变.人们对这个最干净的语法有什么建议吗?
这是我能够提出的最好的,但是当N操作可以执行N log N操作时似乎是不好的形式.
mylist = sorted(mylist,
key=lambda x: x == targetvalue,
reverse=True)
Run Code Online (Sandbox Code Playgroud)
干杯,/ YGA
我正在使用xlrd,xlutils.copy并xlwt打开模板文件,复制它,用新值填充它并保存.
但是,似乎没有任何简单的方法来保留单元格的格式; 它总是被吹走,并被设置为空白.有什么简单的方法可以做到这一点吗?
谢谢!/ YGA
示例脚本:
from xlrd import open_workbook
from xlutils.copy import copy
rb = open_workbook('output_template.xls',formatting_info=True)
rs = rb.sheet_by_index(0)
wb = copy(rb)
ws = wb.get_sheet(0)
for i,cell in enumerate(rs.col(8)):
if not i:
continue
ws.write(i,2,22,plain)
wb.save('output.xls')
Run Code Online (Sandbox Code Playgroud)
版本:
xlrd:0.7.1xlwt:0.7.2如果我有两个并行列表,并希望按照第一个元素的顺序对它们进行排序,那么很容易:
>>> a = [2, 3, 1]
>>> b = [4, 6, 7]
>>> a, b = zip(*sorted(zip(a,b)))
>>> print a
(1, 2, 3)
>>> print b
(7, 4, 6)
Run Code Online (Sandbox Code Playgroud)
如何使用numpy数组而不将它们解压缩到传统的Python列表中呢?
我们有各种电子表格,采用美味复杂的宏和第三方扩展来生成复杂的模型.我正在开展一个涉及稍微调整各种输入并查看结果的项目.我不想亲手或写VBA,而是想看看我是否可以编写一个python脚本来驱动它.换句话说,python脚本将启动,加载Excel工作表,然后通过在某些单元格中进行微小更改并查看它们如何影响其他单元格来与工作表进行交互.
所以,我的问题是双重的:
什么是用这种方式从python中驱动excel的最好的库?
使用该库的最佳文档/示例在哪里?
干杯,/ YGA
Python标准库中是否有任何内容可以正确解析/解析字符串以便在shell命令中使用?我正在寻找perl的python模拟String::ShellQuote::shell_quote:
$ print String::ShellQuote::shell_quote("hello", "stack", "overflow's", "quite", "cool")
hello stack 'overflow'\''s' quite cool
Run Code Online (Sandbox Code Playgroud)
而且,更重要的是,它会在相反的方向上起作用(取一个字符串并将其分解为一个列表).
默认情况下,Python for Windows附带IDLE,这是我遇到的最基本的IDE.对于编辑文件,我会坚持使用emacs,非常感谢.
但是,我想在一些其他shell中运行程序,而不是蹩脚的Windows命令提示符,它不能扩展到超过80个字符.
如果我打开文件,IDLE让我在其中运行程序,然后点击F5(去Run-> Run Module).我宁愿只是"运行"命令,而不是通过关闭emacs文件,加载IDLE文件等的严格程序.谷歌和IDLE文档的扫描似乎没有给使用IDLE的帮助很多shell但不是它的IDE.
来自堆栈溢出的人的任何建议?理想情况下,我要么喜欢
使用IDLE shell运行程序的建议
关于在IDLE或"cmd"之外的窗口中运行python程序的其他方法的建议.
谢谢,
/ YGA
我对python启动速度有多慢感到非常沮丧.只需导入更多或更少的基本模块需要一秒钟,因为python沿着sys.path运行,寻找匹配的文件(并生成4个stat()调用 - ["foo","foo.py","foo.pyc","foo.so "] - 每次检查).对于复杂的项目环境,有大量不同的目录,这可能需要大约5秒钟 - 所有这些都可以运行可能立即失败的脚本.
有人建议如何加快这个过程?例如,我见过的一个hack是将LD_PRELOAD_32环境变量设置为一个库,它在运行之间缓存ENOENT调用的结果(例如,失败的stat()调用).当然,这有各种各样的问题(可能混淆非python程序,负面缓存等).
(即使这个标题会导致火焰,我意识到)
Python做出了深思熟虑的设计选择,让for循环使用显式迭代,在大多数情况下,代码大大简化了.
但是,如果你的测试用例和更新函数很复杂,有时构造一个iterable会非常麻烦,所以我发现自己编写了以下while循环:
val = START_VAL
while <awkward/complicated test case>:
# do stuff
...
val = <awkward/complicated update>
Run Code Online (Sandbox Code Playgroud)
这个问题是更新位于while块的底部,这意味着如果我想在其中continue嵌入某个地方,我必须:
使用重复代码进行复杂/ awkard更新,AND
冒着忘记它并让我的代码无限循环的风险
我可以去手动滚动一个复杂的迭代器:
def complicated_iterator(val):
while <awkward/complicated test case>:
yeild val
val = <awkward/complicated update>
for val in complicated_iterator(start_val):
if <random check>:
continue # no issues here
# do stuff
Run Code Online (Sandbox Code Playgroud)
这让我感到震惊,因为waaaaay太冗长和复杂.堆栈溢出中的人有一个更简单的建议吗?
回复评论:
@Glenn Maynard:是的,我驳回了答案.如果有一种方法可以在一个方法中编写五行,那就太糟糕了......特别是在一直出现的情况下(循环是图灵完成程序的一个共同特征).
对于寻找具体示例的人:假设我正在使用自定义日期库.那么我的问题是,你将如何在python中表达这一点:
for (date = start; date < end; date = calendar.next_quarter_end(date)):
if another_calendar.is_holiday(date):
continue
# ... do stuff...
Run Code Online (Sandbox Code Playgroud) python ×10
numpy ×2
dictionary ×1
excel ×1
mapping ×1
python-idle ×1
quoting ×1
scripting ×1
shell ×1
sorting ×1
statsmodels ×1
weighted ×1
windows ×1
xlrd ×1
xlwt ×1