Multiple values for one key

Willi Richert w.richert at gmx.net
Fri Aug 29 02:14:12 EDT 2008


Hi,

try defaultdict:

In [1]: from collections import defaultdict

In [2]: d=defaultdict(list)

In [3]: d[1].append(7)

In [4]: d[1].append(8)

In [5]: d
Out[5]: defaultdict(<type 'list'>, {1: [7, 8]})

In [6]: d[1]
Out[6]: [7, 8]

Regards,
wr

Am Donnerstag 28 August 2008 19:02:55 schrieb Ron Brennan:
> 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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080829/4d312fa9/attachment-0001.html>


More information about the Python-list mailing list