Every book in the *Effective* series is fantastic, and this one is no different. I would go as far as to say that it should be required reading if you develop in Python on a regular basis!
As for the other books in the series, this one is organized into 2-10 page sections with a short bullet-point recommendations at the end. This makes it really easy to skim topics that you are already familiar with, and makes the book useful for everyone from beginners to experienced devs.
The main reason I picked up the book was for its chapter on concurrency and parallelism, which I must say is a bit disappointing in Python. After reading the chapter, I can see why I always found it so confusing: Python has threads and supporting libraries for them, but only one thread can ever run at a time! I thought maybe there was a GIL exception for threads, but apparently not. Threads can be interrupted between any two bytecode instructions, meaning that you have to be careful about sharing data between threads and properly using locks. Since threads are only useful for working around blocking IO, such as network calls and file reads/writes, the newer asyncio machinery, where the programmer determines the interruption points, is a much more principled approach to concurrency. The author points out, though, that it's easy to accidentally use blocking IO operations, and even demonstrates how to debug your program to find slow-downs due to blocking. Why doesn't Python have async versions of open, etc.?