>>>>> "GM" == Gareth McCaughan <Gareth.McCaughan@pobox.com> writes: GM> Consider the following piece of code, which takes a file GM> and prepares a concordance saying on which lines each word GM> in the file appears. (For real use it would need to be GM> made more sophisticated.) | line_number = 0 | for line in open(filename).readlines(): | line_number = line_number+1 | for word in map(string.lower, string.split(line)): | existing_lines = word2lines.get(word, []) | | existing_lines.append(line_number) | ugh! | word2lines[word] = existing_lines | I've run into this same situation many times myself. I agree it's annoying. Annoying enough to warrant a change? Maybe -- I'm not sure. GM> I suggest a minor change: another optional argument to GM> "get" so that GM> dict.get(item,default,flag) Good idea, not so good solution. Let's make it more explicit by adding a new method instead of a flag. I'll use `put' here since this seems (in a sense) opposite of get() and my sleep addled brain can't think of anything more clever. Let's not argue about the name of this method though -- if Guido likes the extension, he'll pick a good name and I go on record as agreeing with his name choice, just to avoid a protracted war. A trivial patch to UserDict (see below) will let you play with this. >>> d = UserDict() >>> word = 'hello' >>> d.get(word, []) [] >>> d.put(word, []).append('world') >>> d.get(word) ['world'] >>> d.put(word, []).append('gareth') >>> d.get(word) ['world', 'gareth'] Shouldn't be too hard to add equivalent C code to the dictionary object. -Barry -------------------- snip snip -------------------- Index: UserDict.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserDict.py,v retrieving revision 1.7 diff -u -r1.7 UserDict.py --- UserDict.py 2000/02/02 15:10:14 1.7 +++ UserDict.py 2000/08/03 04:35:11 @@ -34,3 +34,7 @@ self.data[k] = v def get(self, key, failobj=None): return self.data.get(key, failobj) + def put(self, key, failobj=None): + if not self.data.has_key(key): + self.data[key] = failobj + return self.data[key]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4