#!/usr/bin/env python

# Dictionaries can be declared with curly brackets or the dict() method

numbers = {}
words = dict()

# We can also declare a dictionary with items in it

numbers = {
    '2': 'two',
    '1': 'one',
    '4': 'four',
    '3': 'three',
    '5': 'five'
}

# print(numbers)

# This will print the keys
# The keys of a list are unordered
# for n in numbers:
    # print(n)

# Printing using list comprehension
# l = list(range(10))
# [print(i) for i in l]

# [print(k) for k in numbers.keys()]
# [print(k) for k in numbers.values()]
# [print(k) for k in numbers.items()]

# The key of a dictionary must either be a string or a tuple (something that is immutable)

words['ornithic'] = 'nothing'
words['ornithic'] = 'of, like or pertaining to birds'
words['custos'] = 'guardian, custodian or keeper, especially of convents or monasteries'
words['declivity'] = 'place that slopes downwards; inclination downwards'
words['kobold'] = 'spirit of the mines'
words['Valhalla'] = 'the hall of Odin into which the souls of heroes slain in battle and others who have died bravely are received.'

[print(item) for item in words.items()]

# Determine if a value exists

# print('bob' in words)
# print('Valhalla' in words)

# Set default
words.setdefault('python', 'Not yet defined.')
[print(item) for item in words.items()]

# This works but is dangerous
print('kobold: ', words['kobold'])
print('valhalla: ', words.get('valhalla', 'not in dictionary'))
print('Valhalla: ', words.get('Valhalla', 'not in dictionary'))

# A worse alternative don't do this
if 'Valhalla' in words:
    print(words['Valhalla'])
else:
    print('not in dictionary')

# Pretty printing
import pprint

pprint.pprint(words)
pprint.pprint(numbers)