Еще один способ ее решения - использование dict comprehension
и setdefault
метода dict:
rocks = [('talc', 1), ('lead', 1.5), ('copper', 3), \
('nickel', 4), ('silicon', 6.5), ('emerald', 7.5),\
('boron', 9.5), ('diamond', 10)]
aa = {}
bb = {aa.setdefault("soft",[]).append(k) if 1 <= v <= 3 \
else aa.setdefault("medium",[]).append(k) if 3.1 <= v <= 5 \
else aa.setdefault("hard",[]).append(k) if 5.1 <= v <= 8 \
else aa.setdefault("very hard",[]).append(k) \
for k, v in rocks}
print (aa)
# Result--> {'soft': ['talc', 'lead', 'copper'], 'medium': ['nickel'], 'hard': ['silicon', 'emerald'], 'very hard': ['boron', 'diamond']}
Я надеюсь, что это даже поможет вам понять использование setdefault. :)