пропущенные аргументы при преобразовании списка в словарь - PullRequest
1 голос
/ 29 марта 2020

случайный список аргументов просто не входит в mydict и исчезает, и я не знаю, что делать. мой код -

def openOrSenior(data):
    data = dict(data)
    print(data)
    output = []
    for k, v in data.items():
        if k >= 55 and v > 7:
            output += ['Senior']
        else:
            output += ['Open']
    return output
print(openOrSenior( [[17, 18], [57, 25], [56, 24], [41, 2], [22, 27], [48, 15], [39, 21], [41, 2]] ))

output-

{17: 18, 57: 25, 56: 24, 41: 2, 22: 27, 48: 15, 39: 21}
['Open', 'Senior', 'Senior', 'Open', 'Open', 'Open', 'Open']

где находится [41, 2]? иногда это происходит с разными номерами и местами в списке, поэтому я не могу понять, в чем проблема. Мне нужно это для этого ката в codewars https://www.codewars.com/kata/5502c9e7b3216ec63c0001aa/train/python

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

k = 41 (4-й элемент) уже был в этом списке ... Python словари не поддерживают дубликаты ключей и учитывают последнее вхождение k = 41, которое составляет [41, 2].

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

ключи в dict уникальны, поэтому вы перезаписываете ключ 41, уменьшая ожидаемый вывод, чтобы исправить, вы можете использовать:

def openOrSenior(data):
    output = []
    for k, v in data:
        if k >= 55 and v > 7:
            output += ['Senior']
        else:
            output += ['Open']
    return output
print(openOrSenior( [[17, 18], [57, 25], [56, 24], [41, 2], [22, 27], [48, 15], [39, 21], [41, 2]] ))

вывод:

['Open', 'Senior', 'Senior', 'Open', 'Open', 'Open', 'Open', 'Open']

как вы можете видеть, внутренние списки распакованы в 2 переменные, k и v


, или вы можете использовать понимание списка:

def openOrSenior(data):
    return ['Senior' if k>=55 and v>=6 else 'Open' for k, v in data]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...