diff --git a/dict.md b/dict.md new file mode 100644 index 0000000..8878041 --- /dev/null +++ b/dict.md @@ -0,0 +1,135 @@ + +# 📘 Python Dictionary Exercises by EKIKA + +These exercises will allow you working with Python `dict`. You’ll learn nested structures, lookups, merges, transformations, filtering, and frequency maps — foundational for JSON, API, and data processing. + +--- + +## PYEKX-2ce5579c + +**Invert a Dictionary (Simple)** + +### Problem +Write a function `invert_dict(d)` that swaps keys and values. + +### Example +```python +invert_dict({'a': 1, 'b': 2}) +# Output: {1: 'a', 2: 'b'} +``` + +### Why? (*Why it matters*) +- Useful in reverse lookups. +- Found in config parsers, ENUM-like mappings, and translation systems. +- Reversing data relationships is common in APIs and normalization. + +### Pro Constraints +- Assume all values are unique and hashable. +- Must not mutate the input dictionary. +- Bonus: Extend to many-to-one values: `{1: ['a', 'b']}` if both `a` and `b` mapped to 1. + +--- + +## PYEKX-7b549e55 + +**Merge Dictionaries with Conflict Resolution** + +### Problem +Write `merge_dicts(a, b)` where `b` overrides values in `a`. + +Add a `mode` argument: +- `'override'` (default): `b` overwrites `a`. +- `'sum'`: if values are numeric, sum them. +- `'append'`: create lists for conflicting keys. + +### Example +```python +merge_dicts({'x': 2}, {'x': 3}, mode='sum') +# Output: {'x': 5} +``` + +### Why? +- Merging config files, environment overrides. +- Inventory and accounting systems often need conflict handling logic. +- Avoids accidental overwrites by making intent explicit. + +### Pro Constraints +- Must not mutate original dicts. +- Use pure dict operations only (no `collections.ChainMap`, etc.). +- Bonus: Support deeply nested dictionaries. + +--- + +## PYEKX-8be01ef0 + +**Count Frequencies of Elements** + +### Problem +Write a function `freq_map(lst)` that returns frequency of elements in a list using a dictionary. + +### Example +```python +freq_map(['a', 'b', 'a']) +# Output: {'a': 2, 'b': 1} +``` + +### Why? +- Foundational for log analysis, NLP, and aggregation pipelines. +- Used in dashboards, tag clouds, voting systems. +- Also forms the basis of histograms and feature vectors. + +### Pro Constraints +- Do not use `collections.Counter`. +- Bonus: Make function case-sensitive toggle via `case_sensitive=True`. + +--- + +## PYEKX-4ffdfbd7 + +**Nested Key Lookup** + +### Problem +Write `nested_get(d, keys)` where `keys` is a list like `['a', 'b', 'c']` that returns `d['a']['b']['c']`. + +### Example +```python +nested_get({'a': {'b': {'c': 42}}}, ['a', 'b', 'c']) +# Output: 42 +``` + +### Why? +- Vital in parsing JSON, API responses, settings files. +- Common in recursive data structures, permission systems. +- Avoids `KeyError` and nested `try` blocks. + +### Pro Constraints +- Must not crash on missing keys. +- Return `None` or optional `default` value. +- Must work with arbitrary depth. + +--- + +## PYEKX-2d3191a8 + +**Top N Frequent Elements** + +### Problem +Write `top_n_frequent(lst, n)` to return top `n` most frequent items. + +### Example +```python +top_n_frequent(['x', 'y', 'x', 'z'], 2) +# Output: [('x', 2), ('y', 1)] +``` + +### Why? +- Used in autocomplete, search trends, error analysis. +- Found in ecommerce (top sold items), NLP (most used terms), and telemetry. +- Teaches sorting dicts by value and memory-efficient counting. + +### Pro Constraints +- No third-party modules. +- Handle ties deterministically (alphabetical or insertion). +- Bonus: Make output format toggleable (dict or list of tuples). + +---