问题标签 [autovivification]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 实现嵌套字典的最佳方法是什么?
我有一个基本上相当于嵌套字典的数据结构。假设它看起来像这样:
现在,维护和创建它非常痛苦;每次我有一个新的州/县/专业时,我都必须通过令人讨厌的 try/catch 块创建下层词典。此外,如果我想遍历所有值,我必须创建烦人的嵌套迭代器。
我也可以使用元组作为键,如下所示:
这使得对值的迭代变得非常简单和自然,但是在语法上做聚合和查看字典的子集(例如,如果我只想逐个状态)会更加痛苦。
基本上,有时我想将嵌套字典视为平面字典,有时我想将其视为复杂的层次结构。我可以将这一切都包装在一个类中,但似乎有人可能已经这样做了。或者,似乎有一些非常优雅的句法结构可以做到这一点。
我怎样才能做得更好?
附录:我知道,setdefault()
但它并没有真正实现干净的语法。此外,您创建的每个子词典仍然需要setdefault()
手动设置。
python - 在 Python 中初始化 dicts 的最佳方法是什么?
很多时候在 Perl 中,我会做这样的事情:
我如何将它翻译成 Python?到目前为止,我有:
有没有更好的办法?
perl - 如何在 Perl 中禁用自动生存?
假设您有一个由一个大团队“开发”的巨大应用程序;)。这是当有人检查数据结构过深时可能发生的潜在灾难的简化模型。如果无法完全或在范围内禁用自动验证,如何解决这个问题?非常感谢你 :) !!!!
这将输出以下内容:
是的,我知道有警告,但是……可能为时已晚。
说我的 hashref 引用了一个绑定的 HASH 会有所帮助。
可能如果我实现一个好的 FETCH 方法来检查结构中更深的检查,我会轻松解决我的问题吗?
我查看了Tie::StrictHash、Tie::Hash和perltie。这是我的解决方案的简化版本:
我实现的是只触摸应用程序中的一个地方。现在所有像 if($some_ref->{deep}{doot}) 这样的地方都会导致堆栈跟踪死亡。所以我会很容易地找到它们并纠正它们。而且这种新的著作是不可能的。Perl 也适用于大型应用程序,您只需要了解更多;)。
谢谢你们!我希望这对其他人也有帮助。
ruby - 红宝石自动复活
我一直在尝试在 ruby 中使用 autovivification 对此进行简单的记录合并:
例如,我希望 A1 AINV BUY 9.15 的记录总共有 6800。这是使用自动生存的完美问题。所以这是我的代码:
问题是无论我如何尝试总结 h[@account][@ticker][@type][@price] 中的值,它都会给我这个错误:
我尝试过使用不同的“自动生存”方法,但没有结果。这不会在 perl 中发生!autofvivification 会知道你想要做什么。ruby 似乎没有这个功能。
所以我的问题真的是,我如何在 ruby 中简单地“合并”记录。具体来说,我如何获得以下总和:
h[@account][@ticker][@type][@price]
非常感谢您的帮助!!
只是为了澄清格伦的解决方案。这将是完美的,除非它提供(在 ruby 1.9 中使用标准 CSV 库进行了一些修改:
给出以下错误:
perl - 为什么 Perl 的自动生存在这种情况下起作用?
有人能帮我理解这个 Perl 程序的输出吗:
和输出:
“富”从何而来?怎么不是dumper打印出来的?
请注意,如果我交换作业的顺序:
我的输出是我所期望的:
编辑:我知道这use strict;
会抓住这一点,但我更感兴趣的是知道字符串“foo”是如何被打印的。
perl - 在这种情况下,为什么 Perl 会自动激活?
为什么会$a
变成arrayref?我没有向它推任何东西。
python - 如何进行高级 Python 哈希自动生存?
这个问题是关于在 Python 中实现完整的 Perl 自动生存。我知道之前有人问过类似的问题,到目前为止,最好的答案是“在 Python 中实现嵌套字典的最佳方法是什么? ”。但是,我希望这样做:
没有a['x']['y'] = []
先声明,或者更确切地说,a['x'] = {}
两者都不声明。(注意在 Perl 中你可以这样做push @{$a->{x}{y}}, 'z';
。)
我知道dict
类list
排序不混合,所以这很难,但我很想看看是否有人有一个巧妙的解决方案可能涉及创建一个继承的类,dict
但在其上定义了一个新append
方法?
我也知道这可能会让一些 Python 纯粹主义者望而却步,他们会要求我坚持使用 Perl。但是,即使只是为了挑战,我也想看到一些东西。
python - 在 dicts 的 dict 中,你如何模拟 Perl 的自动激活行为?
谷歌和在线文档都没有对我的查询提供太多见解,所以我想我会在这里询问社区。
在 Perl 中,您可以轻松设置 hash-of-a-hash-of-a-hash 并像这样测试最终密钥:
Python 中的“最佳实践”等价物是什么?
ruby - 使用 Ruby 中的新运算符对自动激活哈希进行多次初始化
我想通过一行表达式初始化几个自动激活的哈希。到目前为止,我为该AutoHash
对象找到了一个额外的方法:
这使我可以执行以下操作
但是,我觉得可以通过定义一个新的运算符来使下面的句子成为可能:=
你能帮我实现这个吗?
我必须使用superators吗?
更新:现在我看到需要在类之外定义运算符。是否可以定义这样的对象克隆运算符?
Update2更清晰的方法定义few
,感谢 Joshua
参考