[Tutor] Dictionary of dictionaries issue

Pablo Englebienne pablo.englebienne at gmail.com
Thu Nov 13 14:11:39 CET 2008


Hi, I'm trying to work with a dictionary of dictionaries and I'm  
having trouble accessing a specific element of it:

$ python
Python 2.6 (trunk:66714:66715M, Oct  1 2008, 18:36:04)
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
 >>> r = ('a','b','c')
 >>> c = (1,2,3)
 >>> d = dict.fromkeys(r,dict.fromkeys(c))
 >>> d
{'a': {1: None, 2: None, 3: None}, 'c': {1: None, 2: None, 3: None},  
'b': {1: None, 2: None, 3: None}}
 >>> d['a'][1]=0
 >>> d
{'a': {1: 0, 2: None, 3: None}, 'c': {1: 0, 2: None, 3: None}, 'b':  
{1: 0, 2: None, 3: None}}
 >>> import copy

As you can see, attempting to assign a specific member, d['a'][1]  
updates all values in d[*][1], not what I intended.

I thought the solution could be in using copy.deepcopy, but I might  
not be using it right:

 >>> d2 = dict.fromkeys(r,copy.deepcopy(dict.fromkeys(c)))
 >>> d2
{'a': {1: None, 2: None, 3: None}, 'c': {1: None, 2: None, 3: None},  
'b': {1: None, 2: None, 3: None}}
 >>> d2['a'][1]=0
 >>> d2
{'a': {1: 0, 2: None, 3: None}, 'c': {1: 0, 2: None, 3: None}, 'b':  
{1: 0, 2: None, 3: None}}

Any suggestions/pointers would be appreciated!

--
Pablo Englebienne
pablo.englebienne at gmail.com








More information about the Tutor mailing list