>>> sorted((i,k) for i,j in mydict.items() for k in ([j] if isinstance(j, str) or isinstance(j, int) else j))
[('four', 5), ('four', 7), ('four', 8), ('four', '6'), ('nine', 9), ('one', 1), ('three', 3), ('two', '2')]
Идея заключается в том, что если значение равно int
или str
, вы помещаете его в list
. Теперь проблема упрощена, потому что у вас есть значение, которое вы всегда можете перебрать
Если вы действительно уверены, что вам нужно проверить только int
или str
(не подклассы или юникод), вы можете просто использовать
sorted((i,k) for i,j in mydict.items() for k in ([j] if type(j) in (int, str) else j))
Если значение может быть Unicode, вы должны использовать isinstance(j, basestring)
вместо isinstance(j, str)