Sets and Dictionaries Nanotech Example Copyright Software Carpentry
- Slides: 54
Sets and Dictionaries Nanotech Example Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http: //software-carpentry. org/license. html for more information.
How many molecules of different kinds can we make using the atoms in our warehouse? Sets and Dictionaries Nanotech Example
How many molecules of different kinds can we make using the atoms in our warehouse? # Molecular formula file helium : He 1 water : H 2 O 1 hydrogen : H 2 Sets and Dictionaries Nanotech Example
How many molecules of different kinds can we make using the atoms in our warehouse? # Molecular formula file# Atom inventory file helium : He 1 water : H 2 O 1 hydrogen : H 2 Sets and Dictionaries He 1 H 4 O 3 Nanotech Example
How many molecules of different kinds can we make using the atoms in our warehouse? # Molecular formula file# Atom inventory file helium : He 1 water : H 2 O 1 hydrogen : H 2 He 1 H 4 O 3 Now have all the tools we need Sets and Dictionaries Nanotech Example
Natural to represent inventory as dictionary Sets and Dictionaries Nanotech Example
Natural to represent inventory as dictionary Keys: atomic symbols Sets and Dictionaries Nanotech Example
Natural to represent inventory as dictionary Keys: atomic symbols Values: number of atoms available Sets and Dictionaries Nanotech Example
Natural to represent inventory as dictionary Keys: atomic symbols Values: number of atoms available 'He' 1 'O' 'H' 4 3 Sets and Dictionaries Nanotech Example
Represent individual molecules the same way Sets and Dictionaries Nanotech Example
Represent individual molecules the same way water 'H' 'O' 2 1 Sets and Dictionaries Nanotech Example
Store formulas as a dictionary of dictionaries Sets and Dictionaries Nanotech Example
Store formulas as a dictionary of dictionaries Keys: molecule names Sets and Dictionaries Nanotech Example
Store formulas as a dictionary of dictionaries Keys: molecule names Values: dictionaries of formulas Sets and Dictionaries Nanotech Example
Store formulas as a dictionary of dictionaries Keys: molecule names Values: dictionaries of formulas 'ammonia' 'water' Sets and Dictionaries Nanotech Example
Number of molecules that can be made is: min available[atom] required[atom] atom ∈ formula Sets and Dictionaries Nanotech Example
Number of molecules that can be made is: min available[atom] required[atom] atom ∈ formula If atom not in available, its count is implicitly 0 Sets and Dictionaries Nanotech Example
Number of molecules that can be made is: min available[atom] required[atom] atom ∈ formula If atom not in available, its count is implicitly 0 Store results in yet another dictionary Sets and Dictionaries Nanotech Example
Number of molecules that can be made is: min available[atom] required[atom] atom ∈ formula If atom not in available, its count is implicitly 0 Store results in yet another dictionary Keys: molecule names Sets and Dictionaries Nanotech Example
Number of molecules that can be made is: min available[atom] required[atom] atom ∈ formula If atom not in available, its count is implicitly 0 Store results in yet another dictionary Keys: molecule names Values: counts of how many can be made Sets and Dictionaries Nanotech Example
'''Calculate how many molecules of each type can be with the atoms on hand. ''' import sys if __name__ == '__main__': inventory = read_inventory(sys. argv[1]) formulas = read_formulas(sys. argv[2]) counts = calculate_counts(inventory, formulas) show_counts(counts) Sets and Dictionaries Nanotech Example
def read_inventory(filename): '''Read inventory of available atoms. ''' result = {} for line in read_lines(filename): name, count = line. split(' ') result[name] = int(count) return result Sets and Dictionaries Nanotech Example
def read_lines(filename): '''Read lines from file, stripping out blank lines and comments. ''' reader = open(filename, 'r') lines = [] for line in reader: line = line. split('#')[0]. strip() if line: lines. append(line) reader. close() return lines Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' result = {} for line in read_lines(filename): name, atoms = line. split(': ') name = name. strip() atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' Storing results result = {} for line in read_lines(filename): in dictionary name, atoms = line. split(': ') name = name. strip() atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' For each result = {} for line in read_lines(filename): interesting name, atoms = line. split(': ') name = name. strip() line in the input file. . . atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' result = {} for line in read_lines(filename): Separate the name, atoms = line. split(': ') name = name. strip() molecule name and the formula atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' result = {} for line in read_lines(filename): Separate the name, atoms = line. split(': ') name = name. strip() atoms and their counts atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' result = {} for line in read_lines(filename): name, atoms = line. split(': ') name = name. strip() Loop over pairs of atoms and atoms = atoms. strip(). split(' ') formula = {} counts for i in range(0, len(atoms), 2): formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' result = {} for line in read_lines(filename): name, atoms = line. split(': ') name = name. strip() atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): Store the count formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries as an integer with the atomic symbol as key Nanotech Example
def read_formulas(filename): '''Read molecular formulas from file. ''' result = {} for line in read_lines(filename): name, atoms = line. split(': ') name = name. strip() atoms = atoms. strip(). split(' ') formula = {} for i in range(0, len(atoms), 2): And store the formula[atoms[i]] = int(atoms[i+1]) result[name] = formula return result Sets and Dictionaries molecule in the main dictionary Nanotech Example
def calculate_counts(inventory, formulas): '''Calculate how many of each molecule can be made with inventory. ''' counts = {} for name in formulas: counts[name] = dict_divide(inventory, formulas[name]) return counts Sets and Dictionaries Nanotech Example
def calculate_counts(inventory, formulas): '''Calculate how many of each molecule can be made with inventory. ''' counts = {} for name in formulas: counts[name] = dict_divide(inventory, formulas[name]) return counts Sub-dictionary holding atom counts for a particular molecule Sets and Dictionaries Nanotech Example
def calculate_counts(inventory, formulas): '''Calculate how many of each molecule can be made with inventory. ''' counts = {} for name in formulas: counts[name] = dict_divide(inventory, formulas[name]) return counts Big functions: nothing is obviously wrong Sets and Dictionaries Nanotech Example
def calculate_counts(inventory, formulas): '''Calculate how many of each molecule can be made with inventory. ''' counts = {} for name in formulas: counts[name] = dict_divide(inventory, formulas[name]) return counts Big functions: nothing is obviously wrong Small functions: obviously, nothing is wrong Sets and Dictionaries Nanotech Example
def dict_divide(inventory, molecule): '''Calculate how much of a single molecule can be made with inventory. ''' number = None for atom in molecule: required = molecule[atom] available = inventory. get(atom, 0) limit = available / required if (number is None) or (limit < number): number = limit return number Sets and Dictionaries Nanotech Example
def dict_divide(inventory, molecule): '''Calculate how much of a single molecule can be made with inventory. ''' Identical format: number = None for atom in molecule: keys are atoms, required = molecule[atom] available = inventory. get(atom, 0) are counts values limit = available / required if (number is None) or (limit < number): number = limit return number Sets and Dictionaries Nanotech Example
def dict_divide(inventory, molecule): '''Calculate how much of a single molecule can be made with inventory. ''' number = None for atom in molecule: required = molecule[atom] available = inventory. get(atom, 0) limit = available / required if (number is None) or (limit < number): number = limit return number Common pattern: None means "uninitialized", so initialize the first time through the loop Sets and Dictionaries Nanotech Example
def dict_divide(inventory, molecule): '''Calculate how much of a single molecule can be made with inventory. ''' number = None for atom in molecule: required = molecule[atom] available = inventory. get(atom, 0) limit = available / required if (number is None) or (limit < number): number = limit return number Sets and Dictionaries Common pattern: stored value or default Nanotech Example
def dict_divide(inventory, molecule): '''Calculate how much of a single molecule can be made with inventory. ''' number = None for atom in molecule: required = molecule[atom] available = inventory. get(atom, 0) limit = available / required if (number is None) or (limit < number): number = limit return number Common pattern: find minimum of calculated values Sets and Dictionaries Nanotech Example
def show_counts(counts): '''Show many of each molecule can be made. ''' counts = invert_dict(counts) for key in sorted(counts. keys(), reverse=True): for name in sorted(counts[key]): print key, name Sets and Dictionaries Nanotech Example
def show_counts(counts): '''Show many of each molecule can be made. ''' counts = invert_dict(counts) for key in sorted(counts. keys(), reverse=True): for name in sorted(counts[key]): print key, name Reverse to get greatest first Sets and Dictionaries Nanotech Example
def invert_dict(src): '''Invert a dictionary, returning value->set{key}. dst = {} for key in src: value = src[key] if value not in dst: dst[value] = set() dst[value]. add(key) return dst Sets and Dictionaries Nanotech Example
def invert_dict(src): '''Invert a dictionary, returning value->set{key}. dst = {} for key in src: value = src[key] if value not in dst: dst[value] = set() dst[value]. add(key) return dst Common pattern: make sure there's a collection, then add Sets and Dictionaries Nanotech Example
def show_counts(counts): '''Show many of each molecule can be made. ''' counts = invert_dict(counts) for key in sorted(counts. keys(), reverse=True): if key > 0: for name in sorted(counts[key]): print key, name Go back and only show molecules that can actually be made Sets and Dictionaries Nanotech Example
# inventory-00. txt # formulas-01. txt helium : He 1 No output, which is correct. Sets and Dictionaries Nanotech Example
# inventory-01. txt He 1 # formulas-01. txt helium : He 1 1 helium Sets and Dictionaries Nanotech Example
# inventory-02. txt He 1 H 4 # formulas-01. txt helium : He 1 1 helium Sets and Dictionaries Nanotech Example
# inventory-02. txt He 1 H 4 # formulas-02. txt helium : He 1 water : H 2 O 1 1 helium Sets and Dictionaries Nanotech Example
# inventory-02. txt He 1 H 4 # formulas-03. txt helium : He 1 water : H 2 O 1 hydrogen : H 2 2 hydrogen 1 helium Sets and Dictionaries Nanotech Example
# inventory-03. txt He 1 H 4 O 3 # formulas-03. txt helium : He 1 water : H 2 O 1 hydrogen : H 2 2 hydrogen 2 water 1 helium Sets and Dictionaries Nanotech Example
# inventory-03. txt He 1 H 4 O 3 # formulas-03. txt helium : He 1 water : H 2 O 1 hydrogen : H 2 2 hydrogen 2 water 1 helium Looks good. . . Sets and Dictionaries Nanotech Example
# inventory-03. txt He 1 H 4 O 3 # formulas-03. txt helium : He 1 water : H 2 O 1 hydrogen : H 2 2 hydrogen 2 water 1 helium Looks good. . . Code is much simpler than it would be using lists of pairs Sets and Dictionaries Nanotech Example
created by Greg Wilson June 2010 Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http: //software-carpentry. org/license. html for more information.
- Nanotech etf
- Dictionaries are mutable
- Data dictionary example in system analysis and design
- Types of dictionary
- Types of dictionaries
- Kirrkirr
- Database of latin dictionaries
- Examples of testing tools in carpentry
- Mutually disjoint sets example
- Disjoint set
- Fuzzy sets and fuzzy logic theory and applications
- What is braiding
- Columbus custom carpentry
- Fished joint in carpentry
- A carpentry hammer with a slightly rounded
- Big carpentry
- Holding tools classification
- Wood joints
- Sets and propositions in discrete mathematics
- Floor and ceiling discrete math
- Chromosome sets (=n) in mitosis and meiosis
- Anaphase meaning
- Sequences and sets
- Recursive and recursively enumerable sets
- The main text of the book
- Maps
- Maps and sets support bidirectional iterators.
- Subspaces and spanning sets
- Idempotent law
- Finite math
- A pilot sets out from an airport and heads in the direction
- This is a collection of well-defined objects.
- Copyright 2010 pearson education inc
- Application software and system software difference
- Generic and customized software
- Difference between student software and industrial software
- Examples of product metrics
- Shape with 2 sets of parallel sides
- Lexical sets
- Weak entity set example
- @gin lingo
- Which ics functional area arranges
- Information sets in game theory
- Lexical sets
- Sets objectives
- Semantic classification of words
- Predefined sets of different shapes group
- Binary relation in sets
- Correspondence between two sets of elements
- Lexical sets
- Square trapezoid parallelogram rectangle rhombus
- A novice pilot sets a plane's controls
- Information sets in game theory
- Module 5 financial services
- 3 sets of parallel lines