2016-12-09 158 views
0

全部。Python字典按內部字典值排序

我需要字典排序問題的幫助。

我有字典,我想按內部字典值排序。在我的情況下,我需要按'排序'值排序詞典

{'MotoType': {'verbos_name': 'Тип', 'ordering': 6, 'filtering': False, 'value': 'Кросс'}, 'MarkaMoto': {'verbos_name': 'Марка', 'ordering': 1, 'filtering': True, 'value': 'Honda'}, 'Condition': {'verbos_name': 'Состояние', 'ordering': 5, 'filtering': False, 'value': 'Среднее'}, 'Color': {'verbos_name': 'Цвет', 'ordering': 99, 'filtering': False, 'value': 'Красный'}, 'probeg': {'verbos_name': 'Пробег км.', 'ordering': 6, 'filtering': False, 'value': '34500'}, 'CreatYear': {'verbos_name': 'Год выпуска', 'ordering': 6, 'filtering': True, 'value': '2010'}, 'ModelMoto': {'verbos_name': 'Модель', 'ordering': 2, 'filtering': True, 'value': 'VFR800FI'}} 
+3

詞典沒有順序。你應該檢查[OrderedDict](https://docs.python.org/2/library/collections.html#collections.OrderedDict)。 – Lafexlos

+0

在Python 3.6中,字典的順序將被保留(請參閱https://docs.python.org/3.6/whatsnew/3.6.html),但他們說你仍然不應該依賴這個。將字典視爲散列表。 –

+0

[按值排序Python字典]可能的重複(http://stackoverflow.com/questions/613183/sort-a-python-dictionary-by-value) –

回答

2

排序的數據,並使用OrderedDict保持順序。

>>> a ={'MotoType': {'verbos_name': 'Тип', 'ordering': 6, 'filtering': False, 'value': 'Кросс'}, 'MarkaMoto': {'verbos_name': 'Марка', 'ordering': 1, 'filtering': True, 'value': 'Honda'}, 'Condition': {'verbos_name': 'Состояние', 'ordering': 5, 'filtering': False, 'value': 'Среднее'}, 'Color': {'verbos_name': 'Цвет', 'ordering': 99, 'filtering': False, 'value': 'Красный'}, 'probeg': {'verbos_name': 'Пробег км.', 'ordering': 6, 'filtering': False, 'value': '34500'}, 'CreatYear': {'verbos_name': 'Год выпуска', 'ordering': 6, 'filtering': True, 'value': '2010'}, 'ModelMoto': {'verbos_name': 'Модель', 'ordering': 2, 'filtering': True, 'value': 'VFR800FI'}} 
>>> from collections import OrderedDict 
>>> OrderedDict(sorted(a.items(), key=lambda t:t[1]['ordering'])) 
OrderedDict([('MarkaMoto', {'value': 'Honda', 'filtering': True, 'verbos_name': 'Марка', 'ordering': 1}), ('ModelMoto', {'value': 'VFR800FI', 'filtering': True, 'verbos_name': 'Модель', 'ordering': 2}), ('Condition', {'value': 'Среднее', 'filtering': False, 'verbos_name': 'Состояние', 'ordering': 5}), ('probeg', {'value': '34500', 'filtering': False, 'verbos_name': 'Пробег км.', 'ordering': 6}), ('MotoType', {'value': 'Кросс', 'filtering': False, 'verbos_name': 'Тип', 'ordering': 6}), ('CreatYear', {'value': '2010', 'filtering': True, 'verbos_name': 'Год выпуска', 'ordering': 6}), ('Color', {'value': 'Красный', 'filtering': False, 'verbos_name': 'Цвет', 'ordering': 99})]) 
>>> 
2

詞典在Python中是無序的。你可以使用OrderedDict來保存排序。

from collections import OrderedDict 

a = OrderedDict({'MotoType': {'verbos_name': 'Тип', 'ordering': 6, 'filtering': False, 'value': 'Кросс'}, 
    'MarkaMoto': {'verbos_name': 'Марка', 'ordering': 1, 'filtering': True, 'value': 'Honda'}, 
    'Condition': {'verbos_name': 'Состояние', 'ordering': 5, 'filtering': False, 'value': 'Среднее'}, 
    'Color': {'verbos_name': 'Цвет', 'ordering': 99, 'filtering': False, 'value': 'Красный'}, 
    'probeg': {'verbos_name': 'Пробег км.', 'ordering': 6, 'filtering': False, 'value': '34500'}, 
    'CreatYear': {'verbos_name': 'Год выпуска', 'ordering': 6, 'filtering': True, 'value': '2010'}, 
    'ModelMoto': {'verbos_name': 'Модель', 'ordering': 2, 'filtering': True, 'value': 'VFR800FI'}}) 

out = sorted(a.items(), key=lambda i: i[1]["value"]) 

print(out) 

其輸出

[('CreatYear', {'value': '2010', 'filtering': True, 'ordering': 6, 'verbos_name': 'Год выпуска'}), ('probeg', {'value': '34500', 'filtering': False, 'ordering': 6, 'verbos_name': 'Пробег км.'}), ('MarkaMoto', {'value': 'Honda', 'filtering': True, 'ordering': 1, 'verbos_name': 'Марка'}), ('ModelMoto', {'value': 'VFR800FI', 'filtering': True, 'ordering': 2, 'verbos_name': 'Модель'}), ('Color', {'value': 'Красный', 'filtering': False, 'ordering': 99, 'verbos_name': 'Цвет'}), ('MotoType', {'value': 'Кросс', 'filtering': False, 'ordering': 6, 'verbos_name': 'Тип'}), ('Condition', {'value': 'Среднее', 'filtering': False, 'ordering': 5, 'verbos_name': 'Состояние'})]