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

Reply via email to