Converting YAML file to python dict
data-structures, dictionary, python, yaml
Solution
I think your yaml file should look like (or at least something like, so it's structured correctly anyway):
instance:
Id: i-aaaaaaaa
environment: us-east
serverId: someServer
awsHostname: ip-someip
serverName: somewebsite.com
ipAddr: 192.168.0.1
roles: [webserver,php]
Then, `yaml.load(...)` returns:
{'instance': {'environment': 'us-east', 'roles': ['webserver', 'php'], 'awsHostname': 'ip-someip', 'serverName': 'somewebsite.com', 'ipAddr': '192.168.0.1', 'serverId': 'someServer', 'Id': 'i-aaaaaaaa'}}
And you can go from there...
So used like:
>>> for key, value in yaml.load(open('test.txt'))['instance'].iteritems():
print key, value
environment us-east
roles ['webserver', 'php']
awsHostname ip-someip
serverName somewebsite.com
ipAddr 192.168.0.1
serverId someServer
Id i-aaaaaaaa
Problem
I am having the following problem of mapping documents within a YAML file to a `dict` and properly mapping them. I have the following YAML file, which represents a server (`db.yml`): ``` instanceId: i-aaaaaaaa environment:us-east serverId:someServer awsHostname:ip-someip serverName:somewebsite.com ipAddr:192.168.0.1 roles:[webserver,php] ``` I load this YAML file, which I can do without any problems, I think I understand that. ``` instanceId = getInstanceId() stream = file('db.yml', 'r') dict = yaml.load_all(stream) for key in dict: if key in dict == "instanceId": print key, dict[key] ``` I'd like the logic to work like the following: - load yaml, map to dict - look in every dict in the document, if the `instanceId` matches that which was set by `getInstanceId()`, then print out all of the keys and values for that document. If I look at the map data structure from the command line, I get: ``` {'instanceId': 'i-aaaaaaaa environment:us-east serverId:someServer awsHostname:ip-someip serverName:someserver ipAddr:192.168.0.1 roles:[webserver,php]'} ``` I think I might be creating the data structure for the YAML file improperly, and on matching the contents on the `dict`, I am a bit lost. Side note: I cannot load all of the documents in this file using `yaml.load()`, I tried `yaml.load_all()`, which seems to work but my main issue still exists.