Like zip but for corresponding dictionaries (dicts with the same keys).
dict_zip takes any number of dictionaries and gives you an iterable of corresponding elements of those dictionaries.
Iteration order is guaranteed to be the iteration order of the first argument.
pip install "git+https://github.com/mCodingLLC/dict_zip@v0.0.3"
Signature:
dict_zip(d1, ..., dn) -> iterable of (key, v1, ..., vn)
For example:
from dict_zip import dict_zip
def main():
prices = {"apple": 1.00, "banana": 2.50, "chocolate": 3.00}
quantities = {"apple": 12, "banana": 6, "chocolate": 1}
costs = {"apple": 0.50, "banana": 2.00, "chocolate": 2.50}
for name, price, quantity, cost in dict_zip(prices, quantities, costs):
print(f"Item: {name}, Profit: ${(price - cost) * quantity:.2f}")
if __name__ == "__main__":
main()prints
Item: apple, Profit: $6.00
Item: banana, Profit: $3.00
Item: chocolate, Profit: $0.50
WARNING: dict_zip is intended for use with dict and dict subclasses only, not general mappings.
dict_zip is implemented in C and does NOT call any dictionary methods like
__getitem__, keys, values, items, __hash__, or __iter__.
Instead, we leverage the internal structure of a Python dict to walk the memory directly.
This can have unexpected consequences such as a defaultdict raising an error for a missing
key instead of inserting it.
Basically, all arguments are operated on as if they were dicts.
Note: dict_zip is strict, meaning the keys of every argument must be equal
(insertion order does not matter) or you will get ValueError either on construction
if the lengths differ or a KeyError during iteration for a missing key.
Modifying any of the dicts during iteration is not allowed.
There is some parallel between dict zipping and SQL joins (left, inner, outer, etc.), but only strict zipping is currently supported. I'm open to pull requests that implement these other joins, but have no plans to implement them myself.