Multiple values for one key

Chris Rebert cvrebert+clp at gmail.com
Thu Aug 28 14:41:06 EDT 2008


On Thu, Aug 28, 2008 at 10:02 AM, Ron Brennan <brennan.ron at gmail.com> wrote:
> I have another question.
>
> How would like to be able to add the contents on the values for one key.
>
> key['20001']:[978, 345]

I'm assuming that by this you meant:
assert the_dict['20001'] == [978, 345]

>
> How can I do this?

sum(the_dict['20001']) #=> 1323

Regards,
Chris
========
Follow the path of the Iguana...
Rebertia: http://rebertia.com
Blog: http://blog.rebertia.com

>
> Thanks,
> Ron
>
> On Thu, Aug 28, 2008 at 11:56 AM, Bruno Desthuilliers
> <bruno.42.desthuilliers at websiteburo.invalid> wrote:
>>
>> norseman a écrit :
>>>
>>> Terry Reedy wrote:
>>>>
>>>>
>>>> Ron Brennan wrote:
>>>>>
>>>>> Hello,
>>>>>   How would I create a dictionary that contains multiple values for one
>>>>> key.
>>>>
>>>> Make the value a collection object (set or list if you plan to add and
>>>> delete).
>>>>
>>>>>  I'd also like the key to be able to have duplicate entries.
>>>>
>>>> Dict keys must be hashable and unique.
>>>>
>>>> tjr
>>>>
>>>> --
>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>
>>> ================
>>> First part I understand, second is still giving me a problem.
>>>
>>> For some reason I still want keys to be dbf column headers.
>>> like:
>>>
>>> name:address:zip so forth
>>> ---- ------- --- ------------------
>>> guy: unknown:00000
>>> girl: 123 tiny street:12345
>>> boy:321 here:33333
>>> gal:999 over there: 55555
>>> so forth
>>>
>>> Thus one key has many values. And you can then index on whatever key(s)
>>> you wish - name,zip...
>>
>> You can either use 1/ a list of dicts, or 2/ a dict mapping keys to lists.
>>
>> 1/
>> records = [
>>   {"name":"guy", "address":"unknown","zip":"00000"},
>>   {"name":"girl", "address":"123 tiny street","zip":"12345"},
>>   {"name":"boy", "address":"321 here","zip":"33333"},
>>   {"name":"gal", "address":"999 over there","zip":"55555"},
>> ]
>>
>> keys = ("name", "address", "zip")
>>
>> print ":".join(keys)
>> print "-" * len(":".join(keys))
>> for record in records:
>>    data = [record[key] for key in keys]
>>    print ":".join(data)
>>
>>
>> 2/
>> records = dict(
>>    name=["guy", "girl", "boy", "gal"],
>>    address=["unknown","123 tiny street","321 there","999 over there"],
>>    zip=["00000", "12345", "33333", "55555"]
>>    )
>>
>> keys = ("name", "address", "zip")
>> nb_records = len(records[keys[0]])
>>
>> print ":".join(keys)
>> print "-" * len(":".join(keys))
>> for i in xrange(nb_records):
>>    data = [data[key][i] for key in keys]
>>    print ":".join(data)
>>
>>
>> You are of course entitled the right to prefer the second solution, but
>> then I hope I'll never have to maintain your code, since it's obviously not
>> an appropriate data structure.
>>
>>> With billions plus records,
>>
>> With billions plus records, it may be time to move to a serious RDBMS.
>> Which btw will provide solution 1, or a lighter version of it using a list
>> of tuples, ie:
>>
>> cursor = connection.cursor()
>> cursor.execute("select name, address, zip from peoples")
>> records = cursor.fetchall()
>>
>> # at this time, you have :
>> #records = [
>> #   ("guy", "unknown","00000",),
>> #   ("girl", "123 tiny street","12345",),
>> #   ("boy", "321 here","33333",),
>> #   ("gal", "999 over there", "55555",),
>> #]
>>
>>
>> (snip)
>>
>>> OK - I know I missed the whole concept of a Python Dictionary.
>>
>> Bad thing for you, since it's the central datastructure in Python.
>>
>>> I haven't read anything as yet that gives a clear picture of what it is
>>> and what it is for.
>>
>> Then you failed to read the FineManual's tutorial, which is where you
>> should have started:
>>
>> http://docs.python.org/tut/node7.html#SECTION007500000000000000000
>>
>> Do yourself a favour : read the above first, then if you still have
>> questions about dicts, we'll gladly try to help.
>>
>> And do yourself another favour : learn about SQL, relational model and
>> RDBMS.
>>
>> (snip description of why the OP *really* wants a RDBMS)
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>
>
>
> --
> FYI, my email address is changing. My rogers account will be deactivated
> shortly.  From now on please use:
> brennan.ron at gmail.com
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>


More information about the Python-list mailing list