special_dragonfly a écrit : > "Ben Finney" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] >> "special_dragonfly" <[EMAIL PROTECTED]> writes: >> >>> I've managed to solve the problem, I really was just being a >>> dunce. >> Doubtful; but at this stage we can't tell, because we still don't know >> what it is you're actually trying to *do*. >> >>> Here's how incase anyone is wondering: >>> >>> class MyClass: >>> def __init__(self): >>> name="" >>> dict={} >>> dict[0]=[] >>> dict[0].append(MyClass()) >>> dict[0][0].name="Hello" >>> print dict[0][0].name >> It's not clear why you are using the value 0 for a dictionary key >> here; nor why you're assigning an attribute to an object after >> creating the object. Neither of them are errors, but without context >> it's hard to know what advice to give. >> > The 0 for a key is just an example. The code I actually have would be just > as meaningful at the end of the day. I could have changed MyClass for > class Animals(object): > def __init__(self, name="", type="", age=""): > self.name=name > self.type=type > self.age=age > > dict={'Mouse':[Animals('George','long eared',20)]} > dict['Mouse'].append(Animals('Benny','hairy',30)) > dict['Cat']=[Animals('Inigo Montoya','spanish',10)] > > and Neil, Bruno has the right idea of what I was trying to do. However, your > code came in handy still as I used your code elsewhere.see below. > > def EnterDictionary(FieldsDictionary,key,data): > for i in range(0,int(data[6:])): > line=myfile.readline() > line=line.strip() > line=line[6:-1] > if key in FieldsDictionary: > FieldsDictionary[key].append(FieldClass(*line.split(","))) > else: > FieldsDictionary[key]=[FieldClass(*line.split(","))]
May I suggest a couple possible improvements ? First : you're of course free to use any naming convention you like, and it's obviously better to stay consistent, but the canonical Python convention is to use all_lower for vars, functions (and methods) and modules, and MixedCase for classes. About the code now: def EnterDictionary(FieldsDictionary,key,data): for i in range(0,int(data[6:])): 1/ Golden rule : avoid the use of "magic numbers". This one stands true for any languages !-). The usual solution is to use symbolic constants. While Python doesn't have real symbolic constant, the convention is to write them ALL_UPPER. 2/ range() can be used with only one argument, which then will be use as the upper bound. IOW, range(0, X) is the same as range(X) line=myfile.readline() 3/ where does this 'myfile' comes from ? (hint : don't use globals when you can avoid them) line=line.strip() line=line[6:-1] 4/ magic numbers again, cf /1. Question : does this 6 has anything to do with the other one ? What will happen when the file format will change ? 5/ you can do all this in a single line, adding the split() too: args = myfile.readline().strip()[XXX:-1].split(",") > if key in FieldsDictionary: > FieldsDictionary[key].append(FieldClass(*line.split(","))) > else: > FieldsDictionary[key]=[FieldClass(*line.split(","))] If you expect key to most of the times be already in FieldsDictionnary, then a try/except block might be a bit faster. If you expect key to not be here most of the times, then your solution is right. Note that you can also use dict.setdefault(key, default): # probably bad names but I don't have a clue what they should be DATA_INDEX_OFFSET = 6 LINE_START = 6 LINE_END = -1 def update_fields_dict(fields_dict, key, data, datafile): for i in range(int(data[DATA_INDEX_OFFSET:])): args =datafile.readline().strip()[LINE_START:LINE_END].split(",") fields_dict.setdefault(key, []).append(FieldClass(*args)) Feel free to take or leave what you consider appropriate here. But by all means avoid magic numbers, except possibly for Q&D throw-away scripts (and even then...). HTH > In future I would ask however, if it's a really stupid question and you feel > that the answer can be found either by searching google (because in some > cases I don't know what to search for), or in one of the O'reilly books, > just say. In either case, if you could refer me to the search term to use or > the book to read I'd be grateful. That's usually what happens then, don't worry. -- http://mail.python.org/mailman/listinfo/python-list