如何在字典的字典中模拟Perl的自动活化行为?

14 投票
4 回答
3972 浏览
提问于 2025-04-16 00:27

谷歌和网上的文档对我的问题都没有提供太多帮助,所以我想在这里问问大家。

在Perl语言中,你可以很简单地设置一个多层嵌套的哈希(类似于字典),然后像这样测试最后的键:

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

那么在Python中,怎么做才算是“最佳实践”呢?

4 个回答

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

来自维基百科关于自动生成的内容

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"
17

最接近的类似东西可能就是下面这个:

import collections

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

hash = hasher()
hash['element1']['sub1']['subsub1'] = 'value1'
if 'subsub1' in hash['element1']['sub1']:
  print 'found value'

撰写回答