python -сортировка списка, содержащего dict (a, b, c в качестве ключей) - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь отсортировать этот список, содержащий dict

import pap4globals
data_list_dict1=[{'a':1, 'b':4, 'c':2},
                {'a':9, 'b':3,'c':2},
                {'a':2,'b':10,'c':1}]

def sort1(data,rev=False):
    if rev==False:
        temp=0
        for i in range(0,len(data_list_dict1)-1):
            startIndex=len(data_list_dict1)-1
            for j in range(len(data_list_dict1[i]-2,i-1,-1)):
                if data_list_dict1[j]<data_list_dict1[startIndex]:
                    startIndex=j
            temp=data_list_dict1[i]
            data_list_dict1[i]=data_list_dict1[startIndex]
            data_list_dict1[startIndex]=temp
        return temp.append(pap4globals.data_list_dict)

    if rev==True:
        temp=0
        for i in range(0,len(data_list_dict1)-1):
            startIndex=len(data_list_dict1)-1
            for j in range(len(data_list_dict1[i]-2,i-1,-1)):
                if data_list_dict1[j]>data_list_dict1[startIndex]:
                    startIndex=j
            temp=data_list_dict1[i]
            data_list_dict1[i]=data_list_dict1[startIndex]
            data_list_dict1[startIndex]=temp
        return temp.append(pap4globals.data_list_dict)

, где pap4globals

import os

def initiate():
    global data_list_dict
    data_list_dict=[]

пытались вызвать функцию на pap4drv.py

import os
import pap4globals
from pap4lib import *
def main():
    pap4globals.initiate()
    sort1(pap4globals.data_list_dict,False)
    print(pap4globals.data_list_dict)


if __name__ == "__main__":
    main()

затем я получил сообщение об ошибке

TypeError: unsupported operand type(s) for -: 'dict' and 'int'

, все еще не понимая, какая замена соответствует моей цели. это только в следующей строке?

for j in range(len(data_list_dict1[i]-2,i-1,-1)):

ps: мой лектор не разрешит нам использовать встроенную функцию в python

1 Ответ

1 голос
/ 17 марта 2020

Строка:

for j in range(len(data_list_dict1[i]-2,i-1,-1)):

должна измениться на

for j in range(len(data_list_dict1[i])-2,i-1,-1):

Теперь возникает ошибка, поскольку len имеет слишком много аргументов.

Во-вторых, следующая строка

if data_list_dict1[j] < data_list_dict1[startIndex]:

выдаст ошибку, поскольку < не поддерживается между двумя словарями.

По чему именно вы хотите отсортировать?

---- -------------------------------------------------- -------- РЕДАКТИРОВАТЬ ----------------------------------------- -------------------- Я адаптировал вашу функцию. Это должно работать:

def sort1(data,rev=False):
    if rev==False:
        for letter in data_list_dict1[0]: #First the A, then the B

            for i in range(0, len(data_list_dict1) - 1):
                currSmallestIndex = i
                for  j in range(i + 1, len(data_list_dict1)):
                    if (data_list_dict1[j][letter] < data_list_dict1[currSmallestIndex][letter]):
                        currSmallestIndex = j

                temp=data_list_dict1[i][letter]
                data_list_dict1[i][letter]=data_list_dict1[currSmallestIndex][letter]
                data_list_dict1[currSmallestIndex][letter]=temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...