0

キーに文字列と数字の両方が含まれているOrderedDictをソートするために使用しています。dictこれが私のコードです:

from collections import OrderedDict
x = {}
x['mon'] = 10
x['day_1'] = 1
x['day_2'] = 2
x['day_10'] = 10
x['day_11'] = 11
dictionary1 = OrderedDict(sorted(x.items(), key=lambda t: len(t[0])))
dictionary2 = OrderedDict(sorted(x.items(), key=lambda t: t[0]))

出力が次のようになることを望みます (の場所は気にしませんmon:2):

OrderedDict([('mon', 2), ('day_1', 1), ('day_2', 2), ('day_10', 10), ('day_11', 11)])

しかし、どちらの方法も機能しませんでした。では、並べ替えルールをカスタマイズする必要があるのではないでしょうか? 助言がありますか?

アップデート:

これが私の組み合わせた答えです(Simeon Visserとhcwhsa):

def convert_dict_key(key):
    try:
        return int(key.split('_')[1])
    except:
        return key

alphanum_key = lambda (key, value): convert_dict_key(key)
dictionary = sorted(dictionary.items(), key=alphanum_key)
4

1 に答える 1

3

できるよ:

>>> dictionary3 = OrderedDict(sorted(x.items(), key=lambda (key, value): int(key.split('_')[1])))
>>> dictionary3
OrderedDict([('day_1', 1), ('day_2', 2), ('day_10', 10), ('day_11', 11)])

これにより、キーが分割され'_'、日付番号が整数としてソートされます。

于 2013-11-12T18:47:31.210 に答える