我正在寻找一种方法来创建一个字典的多个临时副本来保存一些"进化状态",只有轻微的世代偏差,并发现这个小原型字典:
class ptdict(dict):
def asprototype(self, arg=None, **kwargs):
clone = self.__class__(self.copy())
if isinstance(arg, (dict, ptdict)):
clone.update(arg)
clone.update(self.__class__(kwargs))
return clone
Run Code Online (Sandbox Code Playgroud)
基本上我想要smth.喜欢:
generation0 = dict(propertyA="X", propertyB="Y")
generations = [generation0]
while not endofevolution():
# prev. generation = template for next generation:
nextgen = generations[-1].mutate(propertyB="Z", propertyC="NEW")
generations.append(nextgen)
Run Code Online (Sandbox Code Playgroud)
等等.
我想知道,如果这个班级的作者和我错过了什么,因为我无法想象,没有标准库方法.但是收藏品和itertools似乎都没有提供类似的简单方法.
可以用itertools.tee完成这样的事情吗?
更新:这不是复制和更新的问题,因为,这正是这个ptdict正在做的事情.但是使用update不会返回dtd,ptdict会这样做,所以我可以举例说明链式结果或进行就地测试,这样可以提高可读性.(我提供的例子可能有点微不足道,但我不想与大矩阵混淆.)
我为不够精确而道歉.也许下面的例子澄清了为什么我有兴趣获得一个单一副本/更新步骤的字典:
nextgen = nextgen.mutate(inject_mutagen("A")) if nextgen.mutate(inject_mutagen("A")).get("alive") else nextgen.mutate(inject_mutagen("C"))
Run Code Online (Sandbox Code Playgroud) vim脚本文件通过以下方式调用python脚本:
let s:pyscript = resolve(expand('<sfile>:p:h:h')) . '/pyscript/deploy.py'
echom "sourcing " . s:pyscript
pyfile s:pyscript
Run Code Online (Sandbox Code Playgroud)
echom-command向我显示正确文件的扩展点,但以下pyfile s:pyscript结果是错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
IOError: [Errno 2] file or directory not found: '&s:pyscript'
Run Code Online (Sandbox Code Playgroud)
让我得出结论,pyfile之后的所有内容都被立即视为"python",而vim不会评估s:pyscript变量.
它的方法是什么?无论是在python脚本还是vim-"master"脚本都可以.
我尝试了以下说明:
>>> values ['9', '31', '32']
>>> map('abc'.join, values)
and got:
['9', '3abc1', '3abc2']
Run Code Online (Sandbox Code Playgroud)
但我希望:
['abc9', 'abc31', 'abc32']
Run Code Online (Sandbox Code Playgroud)
为什么我弄错了?
只是为了记录我绕过它:
>>> map(lambda x: 'abc%s' % x, values)
Run Code Online (Sandbox Code Playgroud)
但我仍然对第一个地图构造的行为感到困惑!
感谢所有有见地的答案.他们都是正确和有帮助的,所以我不得不扔骰子选择接受哪个 - 我会接受他们中的任何一个;-)
这可能看起来像一个愚蠢的问题,但我有一个400,000个项目的列表,其性能似乎与列表中的100个项目相同.在我看来,你只限于你可能拥有的RAM量,以及列表的最大大小?
再具体一点:
item in bigList)是否有性能影响?