<< All versions
Skill v1.0.1
currentAutomated scan100/100benchflow-ai/skillsbench/python-scala-collections
3 files
──Details
PublishedJuly 9, 2026 at 12:47 PM
Content Hashsha256:bf85562526377b25...
Git SHA44cdda48f6e8
Bump Typepatch
──Files
Files (1 file, 6.3 KB)
SKILL.md6.3 KBactive
SKILL.md · 346 lines · 6.3 KB
version: "1.0.1" name: python-scala-collections description: Guide for translating Python collection operations to idiomatic Scala. Use when converting Python code that uses lists, dictionaries, sets, or involves collection transformations like map, filter, reduce, sorting, and aggregations.
Python to Scala Collections Translation
Collection Creation
Lists
python
# Pythonempty = []nums = [1, 2, 3]repeated = [0] * 5from_range = list(range(1, 11))
scala
// Scalaval empty = List.empty[Int] // or List[Int]()val nums = List(1, 2, 3)val repeated = List.fill(5)(0)val fromRange = (1 to 10).toList
Dictionaries → Maps
python
# Pythonempty = {}person = {"name": "Alice", "age": 30}from_pairs = dict([("a", 1), ("b", 2)])
scala
// Scalaval empty = Map.empty[String, Int]val person = Map("name" -> "Alice", "age" -> 30)val fromPairs = List(("a", 1), ("b", 2)).toMap
Sets
python
# Pythonempty = set()nums = {1, 2, 3}from_list = set([1, 2, 2, 3])
scala
// Scalaval empty = Set.empty[Int]val nums = Set(1, 2, 3)val fromList = List(1, 2, 2, 3).toSet
Transformation Operations
Map
python
# Pythondoubled = [x * 2 for x in nums]doubled = list(map(lambda x: x * 2, nums))
scala
// Scalaval doubled = nums.map(_ * 2)val doubled = nums.map(x => x * 2)
Filter
python
# Pythonevens = [x for x in nums if x % 2 == 0]evens = list(filter(lambda x: x % 2 == 0, nums))
scala
// Scalaval evens = nums.filter(_ % 2 == 0)val evens = nums.filter(x => x % 2 == 0)
Reduce/Fold
python
# Pythonfrom functools import reducetotal = reduce(lambda a, b: a + b, nums)total = sum(nums)product = reduce(lambda a, b: a * b, nums, 1)
scala
// Scalaval total = nums.reduce(_ + _)val total = nums.sumval product = nums.foldLeft(1)(_ * _)// Use foldLeft when you need an initial value
FlatMap
python
# Pythonnested = [[1, 2], [3, 4]]flat = [x for sublist in nested for x in sublist]
scala
// Scalaval nested = List(List(1, 2), List(3, 4))val flat = nested.flatten// or with transformation:val flat = nested.flatMap(identity)
Common Operations
Length/Size
| Python | Scala | |
|---|---|---|
len(lst) | lst.length or lst.size | |
len(dct) | map.size |
Access
| Python | Scala | |
|---|---|---|
lst[0] | lst(0) or lst.head | |
lst[-1] | lst.last | |
lst[1:3] | lst.slice(1, 3) | |
lst[:3] | lst.take(3) | |
lst[3:] | lst.drop(3) | |
dct["key"] | map("key") (throws if missing) | |
dct.get("key") | map.get("key") (returns Option) | |
dct.get("key", default) | map.getOrElse("key", default) |
Membership
python
# Pythonif x in lst: ...if key in dct: ...
scala
// Scalaif (lst.contains(x)) ...if (map.contains(key)) ...
Concatenation
python
# Pythoncombined = list1 + list2merged = {**dict1, **dict2}
scala
// Scalaval combined = list1 ++ list2val merged = map1 ++ map2
Sorting
python
# Pythonsorted_list = sorted(items)sorted_desc = sorted(items, reverse=True)sorted_by_key = sorted(items, key=lambda x: x.name)items.sort() # in-place
scala
// Scalaval sortedList = items.sortedval sortedDesc = items.sorted(Ordering[Int].reverse)val sortedByKey = items.sortBy(_.name)// Note: Scala collections are immutable by default, no in-place sort
Grouping
python
# Pythonfrom itertools import groupbyfrom collections import defaultdict# Group by keygrouped = defaultdict(list)for item in items:grouped[item.category].append(item)
scala
// Scalaval grouped = items.groupBy(_.category)// Returns Map[Category, List[Item]]
Aggregations
python
# Pythontotal = sum(nums)minimum = min(nums)maximum = max(nums)average = sum(nums) / len(nums)
scala
// Scalaval total = nums.sumval minimum = nums.minval maximum = nums.maxval average = nums.sum.toDouble / nums.length
Finding Elements
python
# Pythonfirst_even = next((x for x in nums if x % 2 == 0), None)all_evens = all(x % 2 == 0 for x in nums)any_even = any(x % 2 == 0 for x in nums)
scala
// Scalaval firstEven = nums.find(_ % 2 == 0) // Returns Option[Int]val allEvens = nums.forall(_ % 2 == 0)val anyEven = nums.exists(_ % 2 == 0)
Zipping
python
# Pythonpairs = list(zip(list1, list2))indexed = list(enumerate(items))
scala
// Scalaval pairs = list1.zip(list2)val indexed = items.zipWithIndex
Dictionary/Map Operations
python
# Pythonkeys = list(dct.keys())values = list(dct.values())items = list(dct.items())for key, value in dct.items():process(key, value)# Updatedct["new_key"] = valueupdated = {**dct, "new_key": value}
scala
// Scalaval keys = map.keys.toListval values = map.values.toListval items = map.toList // List[(K, V)]for ((key, value) <- map) {process(key, value)}// Update (creates new map, immutable)val updated = map + ("new_key" -> value)val updated = map.updated("new_key", value)
Mutable vs Immutable
Python collections are mutable by default. Scala defaults to immutable.
python
# Python - mutablelst.append(4)lst.extend([5, 6])dct["key"] = value
scala
// Scala - immutable (creates new collection)val newList = lst :+ 4val newList = lst ++ List(5, 6)val newMap = map + ("key" -> value)// Scala - mutable (when needed)import scala.collection.mutableval mutableList = mutable.ListBuffer(1, 2, 3)mutableList += 4mutableList ++= List(5, 6)
enum type
Use UPPERCASE for enum and constant names in Scala (same as in Python) E.g.
python
class TokenType(Enum):STRING = "string"NUMERIC = "numeric"TEMPORAL = "temporal"STRUCTURED = "structured"BINARY = "binary"NULL = "null"
scala
object BaseType {case object STRING extends BaseType { val value = "string" }case object NUMERIC extends BaseType { val value = "numeric" }case object TEMPORAL extends BaseType { val value = "temporal" }case object STRUCTURED extends BaseType { val value = "structured" }case object BINARY extends BaseType { val value = "binary" }}
Do not use PascalCase. E.g. the following is against the principle:
scala
object BaseType {case object String extends BaseType { val value = "string" }}