13

グーグルとオンラインドキュメントの両方が私のクエリについて多くの洞察を提供していないので、私はここのコミュニティに尋ねると思いました。

Perlでは、ハッシュ・オブ・ア・ハッシュ・オブ・ア・ハッシュを簡単にセットアップして、次のように最終キーをテストできます。

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

ウィキペディアAutovivificationから

于 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 に答える