Перевернутые части словаря в соответствии с его значениями - PullRequest
1 голос
/ 29 апреля 2020

Я новичок в Python и пробую разные вещи со словарями. У меня есть сомнения по поводу того, как изменить порядок всех предыдущих элементов к элементу, значение которого превышает 10

Input: [1 : value1, 2 : value2, 3 : value3, 4 : value4], knowing that (value3 * 2) > 10
Output : [1 : value2, 2 : value1, 3 : value3, 4 : value4]

С реальными примерами из словаря:

Input :  {0: 1, 1: 4, 2: 6, 3: 1, 4: 2}

Output : {0: 4, 1: 1, 2: 6, 3: 1, 4: 2}

Если есть несколько цифр, я хотел, чтобы каждая группа элементов была перевернута:

Input :  {0: 1, 1: 4, 2: 6, 3: 2, 4: 1, 5: 6, 6: 1, 7: 2}

Output : {0: 4, 1: 1, 2: 6, 3: 1, 4: 2, 5: 6, 6: 1, 7: 2}

Ответы [ 2 ]

1 голос
/ 29 апреля 2020
def swapper(d):
    keys = []
    values = []
    for p in d:
        if p*d[p] > 10:
            values.reverse() # reverse the order of values
            for k,v in zip(keys, values): # update values
                d[k] = v
            keys = [] # empty the keys and values lists
            values = []
        else: # keep track of the things we will need to swap
            keys.append(p)
            values.append(d[p])
    return d
1 голос
/ 29 апреля 2020

Кажется, вы запутались между множеством и списком. В случае списка решение будет:

def map_reverse_partial(A):
    start = 0
    for index, ele in enumerate(A):
        if 2 * ele >= 16:
            A[start:index + 1] = reversed(A[start:index + 1])
            start = index + 1
    return A

В случае карты решение будет:

def map_reverse_partial(A):
    start = 0
    for index, ele in enumerate(A.values()):
        if 2 * ele > 10:
            if index > start + 1:
                for i in range(start, (start + index - 1)//2 + 1):
                    A[i], A[start + index - 1  - i] = A[start + index - 1  - i], A[i]
        start = index + 1
    return A
...