On Aug 16, 6:21 pm, James Stroud <[EMAIL PROTECTED]> wrote: > beginner wrote: > > Hi All. > > > I'd like to do the following in more succint code: > > > if k in b: > > a=b[k] > > else: > > a={} > > b[k]=a > > > a['A']=1 > > > In perl it is just one line: $a=$b->{"A"} ||={}. > > I'm afraid you've asked a non sequiter: > > euler 40% cat test.pl > > $a=$b->{"A"} ||={} ; > print "$a\n" ; > > $b->{"B"} = 0 ; > $a=$b->{"B"} ||={} ; > print "$a\n" ; > > $b->{"X"} = 15 ; > $a=$b->{"X"} ||={} ; > print "$a\n" ; > > euler 41% perl test.pl > HASH(0x92662a0) > HASH(0x926609c) > 15 > > James > > -- > James Stroud > UCLA-DOE Institute for Genomics and Proteomics > Box 951570 > Los Angeles, CA 90095 > > http://www.jamesstroud.com/
It is not supposed to be used this way. $b is supposed to be a hash-table of hash-table. If a key exists in $b, it points to another hash table. The $a=$b->{"A"} ||={} pattern is useful when you want to add records to the double hash table. For example, if you have a series of records in the format of (K1, K2, V), and you want to add them to the double hash-table, you can do $a=$b->{K1} || ={} $a->{K2}=V -- http://mail.python.org/mailman/listinfo/python-list