8. Nested Collections

8.1. list of dict

DATA = [
    {'first_name': 'Max'},
    {'first_name': 'José', 'last_name': 'Jiménez'},
    {'first_name': 'Иван', 'tags': ['astronaut', 'roscosmos', 'space']},
]

DATA[0]                            # {'first_name': 'Max'}
DATA[0]['last_name']               # KeyError: 'last_name'
DATA[0].get('tags', 'n/a')         # 'n/a'
DATA[2].get('tags')                # ['astronaut', 'roscosmos', 'space']
DATA[2].get('tags')[1]             # 'roscosmos'

8.2. Multidimensional lists

  • Readability counts:

    array = [[1,2,3],[4,5,6],[7,8,9]]
    array = [[1,2,3], [4,5,6], [7,8,9]]
    array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    array = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ]
    
  • Getting element from nested lists:

    array = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ]
    
    array[2][1]  # 8
    

8.3. Mixed types

array = [
    [1, 2, 3],
    (4, 5, 6),
    {7, 8, 9},
    {'first_name': 'José', 'last_name': 'Jiménez', 'age': 42}
]

array[3]['last_name']  # 'Jiménez'

8.4. Assignments

8.4.1. Split train/test

  1. Mając do dyspozycji zbiór danych Irysów z Code Listing 8.1.

  2. Wyodrębnij nagłówek (pierwsza linia) od danych

  3. Podziel zbiór na dwie listy w proporcji:

    • dane do uczenia - 80%
    • dane testowe - 20%
Algorithm:
  1. zapisz nagłówek do zmiennej
  2. zapisz do innej zmiennej dane bez nagłówka
  3. wylicz punkt przegięcia: długość danych bez nagłówka razy procent
  4. z danych bez nagłówka zapisz do uczenia rekordy od początku do punktu przegięcia
  5. z danych bez nagłówka zapisz do testów rekordy od punktu przegięcia do końca
About:
  • Filename: sequences_split_train_test.py
  • Lines of code to write: 6 lines
  • Estimated time of completion: 15 min
The whys and wherefores:
 
  • Umiejętność przetwarzania złożonych typów danych
  • Korzystanie z przecięć danych
  • Konwersja typów
  • Magic Number
Code Listing 8.1. Sample Iris databases
DATABASE = [
    ('Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species'),
    (5.8, 2.7, 5.1, 1.9, 'virginica'),
    (5.1, 3.5, 1.4, 0.2, 'setosa'),
    (5.7, 2.8, 4.1, 1.3, 'versicolor'),
    (6.3, 2.9, 5.6, 1.8, 'virginica'),
    (6.4, 3.2, 4.5, 1.5, 'versicolor'),
    (4.7, 3.2, 1.3, 0.2, 'setosa'),
    (7.0, 3.2, 4.7, 1.4, 'versicolor'),
    (7.6, 3.0, 6.6, 2.1, 'virginica'),
    (4.9, 3.0, 1.4, 0.2, 'setosa'),
    (4.9, 2.5, 4.5, 1.7, 'virginica'),
    (7.1, 3.0, 5.9, 2.1, 'virginica'),
    (4.6, 3.4, 1.4, 0.3, 'setosa'),
    (5.4, 3.9, 1.7, 0.4, 'setosa'),
    (5.7, 2.8, 4.5, 1.3, 'versicolor'),
    (5.0, 3.6, 1.4, 0.3, 'setosa'),
    (5.5, 2.3, 4.0, 1.3, 'versicolor'),
    (6.5, 3.0, 5.8, 2.2, 'virginica'),
    (6.5, 2.8, 4.6, 1.5, 'versicolor'),
    (6.3, 3.3, 6.0, 2.5, 'virginica'),
    (6.9, 3.1, 4.9, 1.5, 'versicolor'),
    (4.6, 3.1, 1.5, 0.2, 'setosa'),
]