Here is a line in python that should be recorded for posterity…
Some background. I have a multilingual database where several tables exist. Each table is named after a particular “vocabulary” for my website. For instance, there’s a “forums” table for all the terms that are used for pages related to the forums. The purpose of having this table is so that I have all the needed terms very isolated into a nice hierarchy. The SELECT * sql would look like this.. (pardon the fake spanish translations)
mysql> SELECT * FROM forum;
+---------------------+----------------------------+------------------------------+
| ID | enUS | es |
+---------------------+----------------------------+------------------------------+
| Audio Review | Audio Review | [Audio Review] |
| by | by | [by] |
| complete | completed | [completed] |
| current | current | [current projects] |
| dropped | abandoned | [dropped] |
| loading | Loading... | [Loading...] |
| no | no | no |
+---------------------+----------------------------+------------------------------+
As you can see, there is a column “ID”, which is what I use site-wide to access a term, and I select only one other column, according to the language code the user has his/her preference set for. Thus, a general select for such a thing is …
mysql> SELECT ID,enUS FROM forum;
+---------------------+----------------------------+
| ID | enUS |
+---------------------+----------------------------+
| Audio Review | Audio Review |
| by | by |
… etc, etc. Then, I just used PHP to fetch these results into an associative array. I would then have to loop through each record, saving whatever is in the $row[‘ID’] spot as a key to this array, and whatever is in the $row[currentLanguage] spot as the value to said key.
So anyway.. I was trying to achive this effect in python; a Dictionary-type object where I can simply index into it with the term that I want, in order to get the language-translated value represented by the term. I knew there had to be a way to do a famous python one-liner, and since those one-liners typically clock much faster than manual loops..
resultSet = (map(None, row.values()) for row in rows)
Seems simple, but it’s a hassle to work it out when your data is a tuple of dictionaries 😛