次の特性を持つ入力用の辞書があります。
- 各値は、整数、文字列、または反復可能 (文字列以外) のいずれかになります。
- 要素が iterable の場合、その iterable の各要素は文字列または整数のみになります。
元:
mydict = {
'one': 1,
'two': '23',
'three': 3,
'four': [
7,
'6',
5,
8
],
'nine': 9
}
入力を、各タプルがキーと値のペアであるタプルのリストに変換する必要があります。反復可能な要素の場合、要素ごとにキーと値のペアがあり、値でソートされます。たとえば、上記の出力は次のようになります。
('four', 5)
('four', 7)
('four', 8)
('four', '6')
('nine', 9)
('one', 1)
('three', 3)
('two', '2')
現在、次のジェネレーターを使用してこれを実装しています。
def dict_to_sorted_tuples(unsorted_dict):
for key in sorted(unsorted_dict):
if isinstance(unsorted_dict[key], basestring):
yield key, unsorted_dict[key]
continue
try:
for v in sorted(unsorted_dict[key]):
yield key, v
except:
yield key, unsorted_dict[key]
print list(dict_to_sorted_tuples(mydict))
これはよりクリーンな方法で実行できると思いますが、改善のための提案はありますか?