Source code for rayoptics.util.dict2d

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright © 2019 Michael J. Hayford
""" dict2D constructs a M x N dict using row_keys and col_keys as keys

.. Created on Wed Aug 14 21:08:56 2019

.. codeauthor: Michael J. Hayford
"""


[docs]def dict2D(row_keys, col_keys): """ returns a 2D dictionary with M row_keys and N col_keys """ dict_2d = {} for r in row_keys: row = {} dict_2d[r] = row for c in col_keys: row[c] = {} return dict_2d
[docs]def row(dict_2d, row_key): """ returns a dict of the contents of row **row_key** of dict_2d """ return dict_2d[row_key]
[docs]def col(dict_2d, col_key): """ returns a dict of the contents of column **col_key** of dict_2d """ column = {} row_keys = dict_2d.keys() for r in row_keys: column[r] = dict_2d[r][col_key] return column
# dict([(r, dict_2d[r][col_key]) for r in dict_2d.keys()])
[docs]def num_items_by_type(dict_2d, row_keys, col_keys): """ return a dict of the number of items in each row/col of dict_2d """ len_items = dict([(rc, 0) for rc in row_keys+col_keys]) for r in row_keys: for c in dict_2d[r]: num_items = len(dict_2d[r][c]) len_items[r] += num_items len_items[c] += num_items return len_items
[docs]def num_items_by_cell(dict_2d, row_keys, col_keys): """ return a list of the number of items in each cell of dict_2d """ num_items = [] for r in row_keys: for c in dict_2d[r]: ni = len(dict_2d[r][c]) num_items.append((r, c, ni)) return num_items