Data Structures for AI
Dictionaries
3 min read
Dictionaries store key-value pairs. They're everywhere in AI development—API responses, configuration, message formatting, and more.
Creating Dictionaries
# Empty dictionary
config = {}
# With initial values
message = {
"role": "user",
"content": "Hello, Claude!"
}
# Nested dictionaries
api_config = {
"openai": {
"model": "gpt-4",
"temperature": 0.7
},
"anthropic": {
"model": "claude-3-opus",
"max_tokens": 1000
}
}
Accessing Values
message = {"role": "user", "content": "Hello"}
# Direct access (raises KeyError if missing)
role = message["role"] # "user"
# Safe access with .get() (returns None if missing)
role = message.get("role") # "user"
name = message.get("name") # None
name = message.get("name", "Guest") # "Guest" (default)
Modifying Dictionaries
config = {"model": "gpt-3.5"}
# Add or update
config["model"] = "gpt-4" # Update existing
config["temperature"] = 0.7 # Add new
# Update multiple at once
config.update({
"max_tokens": 1000,
"top_p": 0.9
})
# Remove
del config["top_p"] # Delete key
value = config.pop("temperature") # Remove and return value
Iterating Over Dictionaries
settings = {"model": "gpt-4", "temp": 0.7}
# Keys only
for key in settings:
print(key) # "model", "temp"
# Values only
for value in settings.values():
print(value) # "gpt-4", 0.7
# Both keys and values
for key, value in settings.items():
print(f"{key}: {value}")
Nested Access
response = {
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello!"
}
}
]
}
# Chain access carefully
content = response["choices"][0]["message"]["content"]
# Safer with .get() for uncertain structures
content = response.get("choices", [{}])[0].get("message", {}).get("content", "")
Next, we'll learn to work with JSON data. :::