There's really two issues here. 1) adding securities to the QC "Securities" object, and 2) defining a list of securities.
In order for a QC algorithm to get data or trade a security it must be in the "Securities" Dictionary (take note of the capital D). This is a C# 'Dictionary' and NOT a Python 'dict'. One cannot use the familiar Python methods (even something as simple as 'len(self.Securities)' isn't understood). The docs describe this object:
"Algorithms have a securities property which stores a security object for each asset in your algorithm. Security objects hold the models (backtesting behaviors) and properties of an asset. Each security can be completely customized to behave as you'd like. Securities is a Dictionary so you can access your Security objects with their ticker"
So, in order for an algorithm to work, one must add any and all securities one wishes to trade, or even access data, to the 'self.Securities' Dictionary. This is typically accomplished, as Jared showed above, with the the 'AddEquity' method (however, this works a little different when using dynamic universes).
Now, one could use 'self.Securities' as a list of securities. Many of the algorithms I see posted here in the forums do just that. However, since this isn't a Python dict (or other standard Python object like a dataframe) this quickly becomes tedious. My preferred approach is to separately create a Python list or, better yet, a Pandas dataframe to define a list of securities. Also, another note. QC generally just uses the ticker symbol (eg the string 'IBM') to refer to securities and not the actual security objects (eg sid(3766)) as Quantopian does. So to define a list of securities one simply needs to define a list of tickers.
import pandas as pd
# One can create a list
context.security_list = ['SPY', 'IBM', 'AAPL']
# One can also turn that list into a dataframe and then store all kinds of stuff
# The benefit here is all the built in Pandas methods that come with it
context.security_df = pd.DataFrame(index=security_list)
Note, this is separate from adding securities to the 'self.Securities' Dictionary. One still needs to do that. This is just to keep track of securities and to manipulate them in a familiar Python manner.