Multiple values for one key

Ron Brennan brennan.ron at gmail.com
Thu Aug 28 13:02:55 EDT 2008


I have another question.

How would like to be able to add the contents on the values for one key.

key['20001']:[978, 345]

How can I do this?

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080828/54095228/attachment.html>


More information about the Python-list mailing list