HSK 3.0 vocabulary as CSV and JSON: 10,898 words, levels 1 to 9

2026-11-13来源 dev.toEnglish

HSK is the standard Chinese proficiency exam. Its new version, HSK 3.0, has nine levels instead of six, and its word lists are published as a PDF. If you are building a flashcard app, a reader, a tokenizer test set or a frequency study, you want rows.

We needed those rows for HSKStory, where every story is checked word by word against its level's list. So we cleaned the lists once and put them on GitHub under CC BY-SA 4.0:

github.com/bezlant/hsk-3-vocabulary

What is in it

File Rows Contents
hsk-3.0-vocabulary.csv / .json 10,898 one row per word, with the level that introduces it
by-level/hsk-1 to by-level/hsk-7-9 300 to 5,562 the words each level adds
hsk-2.0-to-3.0-changes.csv / .json 11,087 every word in either standard, with old level, new level and status

Each word has five columns:

simplified,traditional,pinyin,level,definitions 爱,愛,ài,1,to love; to be fond of; to like; affection; to be inclined (to do sth); to tend to (happen) 八,八,bā,1,eight 

In the JSON files definitions is an array. Levels 7, 8 and 9 share one band in the syllabus, so their level value is the string 7-9.

Load it

Python, standard library only:

import csv, io, urllib.request from collections import Counter URL = "https://raw.githubusercontent.com/bezlant/hsk-3-vocabulary/main/hsk-3.0-vocabulary.csv" text = urllib.request.urlopen(URL).read().decode("utf-8") words = list(csv.DictReader(io.StringIO(text))) print(len(words)) # 10898 print(Counter(w["level"] for w in words)) # 7-9: 5562, 6: 1777, 5: 1579, 4: 990, 3: 493, 1: 300, 2: 197 

JavaScript:

const url = "https://raw.githubusercontent.com/bezlant/hsk-3-vocabulary/main/hsk-3.0-vocabulary.json"; const words = await (await fetch(url)).json(); const hsk1 = words.filter((w) => w.level === "1"); console.log(hsk1.length); // 300 

Why 10,898 and not 11,000

The syllabus says 11,000. That number counts entries cumulatively, and some written forms appear more than once across levels. One row per distinct word gives 10,898.

Two words will trip you up if you rebuild the cumulative lists by filtering on level. 有点儿 is listed at HSK 1, but from HSK 2 upward the syllabus writes it as 有一点儿. 有时 is listed at HSK 2 and becomes 有时候 from HSK 3. The README shows how to reproduce the published cumulative lists exactly.

What changed from the old HSK

The change file answers the question every learner with an old textbook asks.

Status Words
added (new in 3.0) 6,094
same_level 2,350
moved_up 1,999
moved_down 455
removed 189

So fewer than half of the old list's words kept their level, and more than half of the new list was not in the old one at all.

Sources and license

Word scope and levels come from the final HSK examination syllabus published by the Center for Language Education and Cooperation in November 2025. Pinyin and English definitions come from CC-CEDICT, with 105 entries corrected by hand where the dictionary's default sense did not match how the syllabus uses the word. CC-CEDICT is share-alike, so the dataset is CC BY-SA 4.0 too.

If a definition or reading is wrong, open an issue on the repository. The same lists run the vocabulary pages on hskstory.com, so a fix there reaches learners as well.

原文:https://www.a8q9.cn/en/article/hsk-3-0-vocabulary-as-csv-and-json-10-898-words-levels-1-to-9-8767e5.html

相关文章