Python сортировка сложного словаря - PullRequest
0 голосов
/ 24 марта 2020

Я составил список

data = [{"type":"house", "cost":500, "extra":False, "order":1}, 
{"type":"condo", "cost":40, "extra":False, "order":4}, 
{"type":"house", "cost":120, "extra":True, "order":2}, 
{"type":"house", "cost":800, "extra":True, "order":3}]

и хочу отсортировать данные по order ключу

как бы вы отсортировали его?

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Если вы пытаетесь отсортировать список словарей , попробуйте следующее:

data = [
    {"type": "house", "cost": 500, "extra": False, "order": 1}, 
    {"type": "condo", "cost": 40, "extra": False, "order": 4}, 
    {"type": "house", "cost": 120, "extra": True, "order": 2}, 
    {"type": "house", "cost": 800, "extra": True, "order": 3},
]

data.sort(key=lambda x: x["order"])  # sort by the value of order

Если вы хотите, чтобы ключи в каждом словаре в списке были отсортированы, вы ' придется использовать OrderedDict.

0 голосов
/ 24 марта 2020

Вы не сортируете словарь, вы сортируете список словарей.

Попробуйте это:

data = [{"type":"house", "cost":500, "extra":False, "order":1}, 
{"type":"condo", "cost":40, "extra":False, "order":4}, 
{"type":"house", "cost":120, "extra":True, "order":2}, 
{"type":"house", "cost":800, "extra":True, "order":3}]

length = len (data)
for index1 in range (length) :
    for index2 in range (length) :
        if data [index2]['order'] > data [index1]['order'] :
            data [index2], data [index1] = data [index1], data [index2]
print (data)
...