So, that's a key part of the code (also the root of the aforementioned bad code). It lists possible onsets that languages generated can use.
As you guessed, the first value of the three is the key value. Here's the terrible-code part: If the first value is a number, that stands for a particular phoneme, and the other two values afterwards are pretty much ignored. This simply says "phoneme X can be used as a syllable onset in this language". I commented out phoneme 223 (w), so w will never be used as a possible syllable onset in any language generated.
However, if the first value is not a number, then this code makes a little more sense. I'll use this line as an example:
[['fricative', 0, []], ['approximant', None, [222, 223]] ],
This says that this onset is composed of two phonemes. For the first phoneme, since the first value is not a number, it will be any phoneme that has a voicing/method attribute matching the string. In this case, it will look for fricatives. The second value in this list (the 0) tells us it has to be an unvoiced fricative (possible values are None, meaning no restriction; 0, meaning unvoiced; and 1, meaning voiced). The third value (the empty list) tells us that there are no phonemes which match the criteria (unvoiced fricative) which will be ignored. To clarify what this means, let's check the next phoneme in this onset entry.
The next phoneme entry says it's an approximant, it doesn't matter what the voicing is, but don't use phoneme 222 or 223.
In sum, that one line of code says: One possible onset contains 2 phonemes; where the first phoneme is any unvoiced fricative, and the second phoneme is any approximant that is not "y" or "w".
Later on, each language gets dealt a subset of these possible onsets, and each onset becomes associated with a frequency value. When the gen_word method is run, for each syllable in the word it picks an onset based on a weighted random value. For each phoneme in the onset, if the first entry of the onset is a string (as in the example above), it will go through and pick a weighted random phoneme that fits the criteria described.
To illustrate the point, I just realized the second to last line in the snippet you posted is slightly redundant.
[[213, None, []], ['fricative', 0, [211, 212, 213, 215, 216]] ],
The second entry has a bunch of phonemes in the "ignore list" which are redundant. That line can be rewritten as
[[213, None, []], ['fricative', 0, [212, 216]] ],
since all those extra phonemes (211, 213, 215) are unvoiced fricatives. I have no idea how they ended up in that list in the first place.
I hope that helps, I realize it's still pretty confusing...