Словарь поиск по значению и вернуть ранг в зависимости от позиции? - PullRequest
0 голосов
/ 02 октября 2018

мои базовые данные - это словарь, ключами которого являются страны, а значениями - список имен от 0 до 9.

#base data
data
{'Newyork': ['Don Willis',
           'Lewis Hamilton',
           'Kimi Raikkonen',
           'Daniel Ricciardo',
           'Fernando Alonso',
           'Max Verstappen',
           'Nico Hulkenberg',
           'Valtteri Bottas',
           'Stoffel Vandoorne',
           'Carlos Sainz'],
'Chicago': ['Don Willis',
           'Fernando Alonso',...

find_city (name, rank) следует, учитывая имяучастника и ранга (номер 1, ранг номер позиции индекса 0) и возвращает список всех городов, в которых участник получил определенный ранг.

find_city("Don Willis", 1) == ["Newyork", "Chicago", "Miami"]
find_city("Lewis Hamilton", 6) == [] #None because Lewis Hamilton never ranked 6 in any of city

Вот моя попытка, но покане так много прогресса.Любая помощь?

def find_city(name, rank):
    data.get("Newyork",None)
    b=[]
    for i in enumerate(a):
        b.append(i)
    for (i,v) in b:

Ответы [ 4 ]

0 голосов
/ 02 октября 2018
def find_city(name, rank):
    for i in data:
        try:
             if data[i].index(name) == rank - 1:
                yield i
        except ValueError:
             pass

Он перебирает данные, и если список данных [i] получил имя в ранге - 1, он «возвращает» его, который я использовал, попробуйте, потому что, если имя отсутствует в данных, оно вызывает ValueError и программусбои PS yield возвращает объект, похожий на генератор, поэтому после получения вывода вы должны преобразовать его в список с помощью функции list ()

0 голосов
/ 02 октября 2018

Вам не нужно перечислять здесь, поскольку индексы смещены только на единицу, мы можем просто вычесть 1 из ранга и найти это значение

def find_city(name, rank):
    l = [k for k in data if data[k][rank - 1] == name]
    if len(l) == 0:
        return None
    return l
0 голосов
/ 02 октября 2018

Решая некоторые из этих задач программирования, постарайтесь подумать, можете ли вы переосмыслить вопрос или задачу под рукой другим способом.

Более конкретный или более простой способ обрамления задачи:

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

data = {...}
def find_city(name, rank):
    keys = []
    for key in data:
        if len(data[key]) < rank:
            raise Exception("You tried to reach an index out of bounds")
        if data[key][rank-1] == name:
            keys.append(key)
    return keys
0 голосов
/ 02 октября 2018

Как насчет этого?

def find_city(name, rank):
    city_list = []

    for c, l in data.iteritems():
        if l[rank - 1] == name:
            city_list.append(c)

    return city_list

Это будет циклически проходить по каждому ключу: значению в вашем словаре данных и проверять, находится ли значение в списке результатов этого города на позиции индекса (ранг - 1, поскольку спискис нулевым индексом, драйверы F-1 нет), соответствует name.Если да, ключ (название города) добавляется в список city_list.

По завершении возвращается либо список городов, либо, если ничего не найдено, пустой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...