According to your question, this is what I recommend:
List<string> keylist = new List<string>();
foreach (Dict<string, string> dict in list)
{
keyList.AddRange(dict.Keys);
}
However, what you want to do makes no sense because even though you now have a list of keys from the dictionaries in your list, you no longer know which dict object contains a given key. Further, how do you propose to handle the possibility of multiple keys with the same name from different dict objects?