[IMP] Few dict exercises.
This commit is contained in:
135
dict.md
Normal file
135
dict.md
Normal file
@@ -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).
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user