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