In Week 2 we meet two of the most useful tools in Python — lists and dictionaries. They show up everywhere, and one of the most common stumbling blocks I see is students reaching for the wrong one. The good news is that once you have the rule of thumb, it almost picks itself.
Let me walk through three scenarios you'll recognise from your own scholarship planning.
Scenario 1: a list of universities you're applying to
You sit down and list out the universities you want to apply to. There are five of them. They have an order — maybe alphabetical, maybe by preference. You'll probably loop through them later: print them out, count them, maybe filter the ones whose deadlines have passed.
This is the classic case for a list.
universities = [
"Edinburgh",
"Toronto",
"ETH Zurich",
"Cape Town",
"Manchester",
]
for university in universities:
print("Apply to:", university)A list is the right answer when you have many items of the same kind, in some order, and the main thing you do with them is walk through them.
Could you model this as a dictionary? Technically yes:
universities = {
1: "Edinburgh",
2: "Toronto",
3: "ETH Zurich",
4: "Cape Town",
5: "Manchester",
}But why? The keys are just position numbers — that's what a list already gives you for free. The dictionary version is more typing and more noise for no extra information. When the keys would be meaningless, use a list.
Scenario 2: one scholarship, with many attributes
Now zoom in on a single scholarship — say, Chevening. It isn't a list of similar things. It's one thing with several different facts attached: a name, a country, a degree level, a funding type, a deadline.
This is exactly what a dictionary is for.
chevening = {
"name": "Chevening",
"country": "UK",
"level": "Masters",
"funding": "Full",
"deadline": "2026-11-01",
}
print(chevening["name"], "—", chevening["funding"])A dictionary is the right answer when you have one thing with several named facts about it, and you want to look those facts up by name later.
Could you model this as a list?
chevening = ["Chevening", "UK", "Masters", "Full", "2026-11-01"]This kind of works. But now you have to remember that the country is at position 1 and the funding is at position 3 and the deadline is at position 4. The moment you add a new field — say, "application URL" — every position shifts and you've created bugs for yourself. Reading chevening[3] tells you nothing. Reading chevening["funding"] tells you everything.
When each piece of data has its own meaning, give it a name. That's what a dictionary does.
Scenario 3: many scholarships, each with attributes
Now combine the two. You're tracking ten scholarships, and each one has the same set of attributes — name, country, level, funding, deadline.
You have many items of the same kind (sounds like a list) but each item has named facts (sounds like a dictionary). The answer is to combine them: a list of dictionaries.
scholarships = [
{
"name": "Chevening",
"country": "UK",
"level": "Masters",
"funding": "Full",
"deadline": "2026-11-01",
},
{
"name": "Fulbright",
"country": "USA",
"level": "Masters",
"funding": "Full",
"deadline": "2026-10-15",
},
{
"name": "MasterCard Foundation",
"country": "Various",
"level": "Undergraduate",
"funding": "Full",
"deadline": "2026-12-01",
},
]
for scholarship in scholarships:
if scholarship["funding"] == "Full":
print(scholarship["name"], "in", scholarship["country"])Read that loop out loud. "For each scholarship in my list of scholarships, if its funding is full, print its name and its country." That's the same sentence you'd say to a friend who was helping you shortlist. The code is just the written form.
This pattern — a list of dictionaries — is one of the most common shapes data takes in real programs. CSV rows, API responses, database results all tend to look like this. If you get comfortable with the shape now, the rest of the course gets a lot easier.
The rule of thumb
When you're not sure, ask yourself two questions.
Do I have many items of the same kind? If yes, you want a list.
Does each item have multiple named facts? If yes, you want a dictionary.
Put them together and you get the line I want you to remember:
List = items in order. Dict = facts about one thing. List of dicts = the universe.
Most of the data you'll touch in PySprout — and honestly, most of the data you'll touch as a researcher — fits in one of those three shapes. Once you can spot which is which, the rest is just syntax.
See you in Week 2.