Поиск ключа в словаре Python с помощью «Если ключ в dict:», похоже, не работает - PullRequest
0 голосов
/ 22 сентября 2018

Я перебираю CSV-файл и проверяю, присутствует ли столбец в качестве ключа в словаре.

Это пример строки в файле CSV

833050,1,109,B147599,162560,0

IЯ проверяю, является ли 5-й столбец ключом в этом словаре

{162560: True, 165121: True, 162562: True, 153098: True, 168336: True}

Я передаю этот дикт.как вар.mt_budgets в следующем коде

def check(self, mt_budgets):
    present = {}
    cwd = os.getcwd()
    path = cwd 
    with open(path + 'file.csv.part') as f:
        csv_f = csv.reader(f)
        for row in csv_f:
            if row[4] == '162560':
                print 'Yes STRING'
                if str(row[4]) in mt_budgets:
                    print 'Yes it\'s here'
                    present[row[4]] = True
                else:
                    print 'No it\'s not'
                    print row[4]
                    print mt_budgets

Это вывод, который я получаю

Yes STRING
No it's not
162560
{162560: True, 165121: True, 162562: True, 153098: True, 168336: True}

Я не уверен, почему он не выбирает его как ключ, что здесь происходит?

Спасибо!

1 Ответ

0 голосов
/ 22 сентября 2018
{162560: True} # {int:bool}
{'162560': True} # {str:bool}

Итак, mt_budgets не содержит '162560' (str), содержит 162560 (int)

Ваш код должен быть:

def check(self, mt_budgets):
    present = {}
    cwd = os.getcwd()
    path = cwd 
    with open(path + 'file.csv.part') as f:
        csv_f = csv.reader(f)
        for row in csv_f:
            if int(row[4]) == 162560:  # csv data is possibly str format. convert it to int and compare.
                print 'Yes STRING'
                if int(row[4]) in mt_budgets:
                    print 'Yes it\'s here'
                    present[row[4]] = True
                else:
                    print 'No it\'s not'
                    print row[4]
                    print mt_budgets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...