There is a fundamental flaw in your intended design: in a DictionaryTiddler, which contains key:value pairs, each key must be unique, but in your example, you have two separate entries both with a key of "bob".
To see the problem, try this on Tiddlywiki.com:
1) Create a tiddler (e.g., "MyData") containing the example content shown in your post and set the type of the tiddler to "application/x-tiddler-dictionary"
2) Create another tiddler (e.g., "MyTest") containing: {{MyData##bob}}
Notice that only one result is shown: "darren (rivals)".
To achieve the kind of design you want, you would have to make each key value unique (e.g., "bob-friends" and "bob-rivals"), but then it would be problematic to do a lookup for the "Bob" tiddler. You would have to get the list of all key names and remove any "-friends" and "-rivals" suffix to find the desired key entries, and then restore those suffices when you want to actually fetch the corresponding value for each matching key. The required code is complex and prone to errors in implementation.
You might be able to address the problem by having separate DictionaryTiddlers for each type of relationship. Thus, you would have a "Friends" tiddler containing "Bob:Carlos" and a "Rivals" tiddler containing "Bob:Darren". Of course, this has it's own complexities, in that you would have to check every relationship tiddler to find and display any entries for "Bob".
-e