3.1 How do I choose between lists and tuples?3.1.1 Using tuples for immutability and using lists for mutability3.1.2 Using tuples for heterogeneity and using lists for homogeneity3.1.3 Discussion3.1.4 Challenge3.2 How do I sort lists of complicated data using custom functions?3.2.1 Sorting lists using the default order3.2.2 Using a built-in function as the sorting key3.2.3 Using custom functions for more complicated sorting needs3.2.4 Discussion3.2.5 Challenge3.3 How do I build a lightweight data model using named tuples?3.3.1 Understanding alternative data models3.3.2 Creating named tuples to hold data3.3.3 Discussion3.3.4 Challenge3.4 How do I access dictionary keys, values, and items?3.4.1 Using dynamic view objects (keys, values, and items) directly3.4.2 Being cautious with the KeyError exception3.4.3 Avoiding KeyError with a hygiene check first: The non-Pythonic way3.4.4 Using the get method to access a dictionary item3.4.5 Watching for the setdefault method’s side effect3.4.6 Discussion3.4.7 Challenge3.5 When do I use dictionaries and sets instead of lists and tuples?3.5.1 Taking advantage of the constant lookup efficiency3.5.2 Understanding hashable and hashing3.5.3 Discussion3.5.4 Challenge3.6 How do I use set operations to check the relationships between lists?3.6.1 Checking whether a list contains all items of another list3.6.2 Checking whether a list contains any element of another list3.6.3 Dealing with multiple set objects3.6.4 Discussion3.6.5 ChallengeSummary