13

谷歌和在线文档都没有对我的查询提供太多见解,所以我想我会在这里询问社区。

在 Perl 中,您可以轻松设置 hash-of-a-hash-of-a-hash 并像这样测试最终密钥:

my $hash = {};
$hash{"element1"}{"sub1"}{"subsub1"} = "value1";
if (exists($hash{"element1"}{"sub1"}{"subsub1"})) {
   print "found value\n";
}

Python 中的“最佳实践”等价物是什么?

4

4 回答 4

16

最接近的等价物可能类似于以下内容:

import collections

def hasher():
  return collections.defaultdict(hasher)

hash = hasher()
hash['element1']['sub1']['subsub1'] = 'value1'
if 'subsub1' in hash['element1']['sub1']:
  print 'found value'
于 2010-06-26T03:13:02.353 回答
5

至于这是否是 Python 中的最佳实践,还有待商榷:

hash = {}
hash['element1', 'sub1', 'subsub1'] = 'value'
if ('element1', 'sub1', 'subsub1') in hash:
    print "found value"

但是,如果它适合您,它肯定有效并且非常优雅。

主要缺点是您没有中间访问权限。你不能这样做:

if ('element1', 'sub1') in hash:
   print "found value"
于 2010-06-26T03:20:04.937 回答
2
from collections import defaultdict

tree = lambda: defaultdict(tree)

t = tree()

t[1][2][3] = 4
t[1][3][3] = 5
t[1][2]['test'] = 6

来自维基百科

于 2013-08-16T10:39:40.057 回答
0

我不知道我是否会达成任何协议,但这是我通常声明字典的方式:

someObj = {
  'element1': {
    'sub1': {
      'subsub1': 'value1'
    }
  }
}

至于检查元素的存在,我同意这种方法:

try:
  someObj['element1']['sub1']['subsub1']
except KeyError:
  print('no value found')
else:
  print('found value')
于 2010-06-26T04:09:48.973 回答