Сравните словарь с переменной - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь сравнить значение словаря с переменной, но по некоторым причинам я не могу вывести нужную часть из словаря.Словарь представляет собой вывод из HTML-таблицы.Это код, который я использую для вставки HTML-таблицы в словарь:

with open('output.csv') as fd:
    rd = csv.DictReader(fd, skipinitialspace=True)
    for row in rd:
        lista = { k: row[k] for k in row if k in ['Name', 'Clan Days']}

Это вывод:

{'Name': 'SirFulgeruL2k19', 'Clan Days': '140'}
{'Name': 'Darius', 'Clan Days': '127'}

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

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

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

>>> dict = {'Name': 'SirFulgeruL2k19', 'Clan Days': '140'}
>>> target = 140
>>> if int(dict['Clan Days']) == target:
...    name = dict['Name']
...    
>>> name
'SirFulgeruL2k19'

Редактировать: слишком быстро читать ваш пост, учитывая, что все строки в таблице HTML слишком просты.Используйте ответ Алексея:)

0 голосов
/ 12 декабря 2018

Предполагая, что вы сначала прочитали данные в список словарей:

data = [{ k: row[k] for k in row if k in ['Name', 'Clan Days']}
        for row in rd]

Вы можете использовать next() для поиска первого словаря в data, соответствующего Clan Days значение по умолчанию None, если ни один из записей не соответствует вашему поисковому запросу:

desired_clan_days = '140'
clan_name = next((entry["Name"] for entry in data 
                  if entry["Clan Days"] == desired_clan_days), None)

Теперь next() вернет вам первое совпадение, если вам нужны все совпадения, просто используйте понимание списка:

clan_names = [entry["Name"] for entry in data 
              if entry["Clan Days"] == desired_clan_days]

Обратите внимание, что для такого рода поиска требуется, чтобы в худшем случае (запись не найдена), просматривались все записи в data.Если этот вид поиска является основным вариантом использования этой структуры данных, рассмотрите возможность его перепроектирования, чтобы лучше соответствовать проблеме - например, иметь значение clan_days в качестве ключа со списком имен кланов:

data = { 
    "140": ["SirFulgeruL2k19"],
    "127": ["Darius"]
}

Inв этом состоянии получение совпадения будет постоянной операцией и будет простым, как data[desired_clan_days].defaultdict(list) - это то, что поможет вам осуществить это преобразование.

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