Marcin Stępnicki wrote:
> Hello.
>
> I thought I understand this, but apparently I don't :(. I'm missing
> something very basic and fundamental here, so redirecting me to the
> related documentation is welcomed as well as providing working code :).
>
> Trivial example which works as expected:
>
>>>> x = {'a':123, 'b': 456}
>>>> y = x
>>>> x['a']=890
>>>> y
> {'a': 890, 'b': 456}
>
> Now, let's try something more sophisticated (it's not real world example,
> I've made up the problem which I think illustrates my issue). Let's say
> I've got such a structure:
>
> results = [ {'a': 12, 'b': 30 },
> {'a': 13, 'b': 40 } ]
>
> I'd like to have each row and column in separate object of self-made
> classes.:
>
> class mycolumn():
> def __init__(self, resultset, row, col):
> self.value = resultset[row][col]
> def __str__(self):
> return 'Column value: %s' % self.value
>
> class myrow():
> def __init__(self):
> self.container = {}
> def __str__ (self):
> return self.container
>
> results = [
> {'a': 12, 'b' :30 },
> {'a': 13, 'b' :40 }
> ]
>
> mystruct = []
>
> for row in results:
> mystruct.append ( myrow() )
> for col in row:
> mystruct [len(mystruct)-1].container[col] = \
> mycolumn(results, results.index(row), col)
>
> print mystruct[0].container['b'] # 12
> results[0]['b'] = 50 #
> print mystruct[0].container['b'] # also 12 :/
>
> In other words, I'd like to "map" the results to myrow and mycolumn
> objects, and have these new objects' values changed when I change "results".
>
> I hope I explained it well enough :). Thank you for your time.
>
Would this work for you?
class myrow():
def __init__(self, idict = {}):
self.container = idict
def __str__ (self):
return self.container.__str__()
results = [
{'a': 12, 'b' :30 },
{'a': 13, 'b' :40 }
]
mystruct = []
for row in results:
mystruct.append(myrow(row))
results[1]['b'] = 444
print results # [{'a': 12, 'b': 30}, {'a': 13, 'b': 444}]
print mystruct # does not work ok , you should probably define
# mystruct's __str__ method properly
# But, save for the __str__ thingy, the rest is ok.
for row in mystruct:
print row
# {'a': 12, 'b': 30}
# {'a': 13, 'b': 444}
HTH
--
http://mail.python.org/mailman/listinfo/python-list