On Saturday, May 10, 2014 10:30:06 AM UTC+8, MRAB wrote: > On 2014-05-10 02:22, I wrote: > > > I'm migrating from Perl to Python and unable to identify the equivalent of > > key of key concept. The following codes run well, > > > import csv > > > attr = {} > > > with open('test.txt','rb') as tsvin: > > > tsvin = csv.reader(tsvin, delimiter='\t') > > > for row in tsvin: > > > ID = row[1] > > > until: > > > attr[ID]['adm3'] = row[2] > > > I then try: > > > attr[ID].adm3 = row[2] > > > still doesn't work. Some posts suggest using module dict but some do not. > > I'm a bit confused now. Any suggestions? > > Python doesn't have Perl's autovivication feature. If you want the > > value to be a dict then you need to create that dict first: > > attr[ID] = {} > > attr[ID]['adm3'] = row[2] > > You could also have a look at the 'defaultdict' class in the > > 'collections' module.
I identify the information below: s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] d = defaultdict(list) for k, v in s: d[k].append(v) While it is fine for a small dataset, I need a more generic way to do so. Indeed the "test.txt" in my example contains more columns of attributes like: ID address age gender phone-number race education ... ABC123 Ohio, USA 18 F 800-123-456 european university ACC499 London 33 M 800-111-400 african university ... so later I can retrieve the information in python by: attr['ABC123'].address (containing 'Ohio, USA') attr['ABC123'].race (containing 'european') attr['ACC499'].age (containing '33') The following links mention something similar, http://courses.cs.washington.edu/courses/cse140/13wi/csv-parsing.html http://stackoverflow.com/questions/8800111/parse-csv-file-and-aggregate-the-values http://stackoverflow.com/questions/17763642/reading-tab-separated-file-into-a-defaultdict-python http://semanticbible.com/blogos/2009/06/12/reading-tab-delimited-data-in-python-with-csv/ unfortunately none of them illustrates how to store the values and access them later. Moreover, they bring some new terms, e.g. combined, [], etc. Is there any better reference? Thanks again! -- https://mail.python.org/mailman/listinfo/python-list