Доступ к словарю Python с нечувствительной к регистру строкой - PullRequest
0 голосов
/ 28 мая 2018

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

Например, с помощью этого кода:

dictionary = {'one': 1, 'two': 2, 'three', 3}
list = ['One', 'second', 'THree']

for item in list:
    if item in dictionary:
        print(item)

Я не могу найти способ, который бы вывел: `One Three ', т.е.сравнить ключи словаря и строку, которая у меня есть, без учета регистра

Есть ли способ сделать это?

Ответы [ 6 ]

0 голосов
/ 28 мая 2018

Попробуйте использовать ключевое слово python lambda:

l = ['One', 'second', 'THree']
lc = lambda x: [i for i in x if i.lower() in dictionary]
print(lc(l))

Вывод:

['One', 'THree']

Примечание: я изменил имя переменной list to l, поскольку list является ключевым словом python, поэтому, если вы хотите вызвать ключевое слово list, он не будет вызывать ключевое слово list, а вызовет список

0 голосов
/ 28 мая 2018

Используйте casefold() для поиска без учета регистра:

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.casefold() in dictionary:
        print(item)

Путь к списку:

print( '\n'.join([item for item in list if item.casefold() in dictionary]))
0 голосов
/ 28 мая 2018

Создайте список строчных словарных ключей, затем сравните строчные варианты каждого элемента в вашем списке с этим списком.

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.lower() in [key.lower() for key in dictionary.keys()]:
        print(item)

Таким образом:

One
THree
0 голосов
/ 28 мая 2018

Попробуйте это:

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.lower() in [d.lower() for d in dictionary.keys()]:
        print(item)
0 голосов
/ 28 мая 2018

Вам необходимо обрабатывать без учета регистра на вашем конце, либо преобразовав dictionary.keys() в нижний регистр или list элементы в нижний регистр, либо и то, и другое:

for item in list:
    if item.lower() in map(str.lower, dictionary.keys()):
        print(item)

Вы можете использовать либо lower() или upper(), но вы должны быть последовательными в обоих случаях.

0 голосов
/ 28 мая 2018

использовать строковый метод lower:

dictionary = {'one': 1, 'two': 2, 'three': 3}
list = ['One', 'second', 'THree']

for item in list:
    if item.lower() in dictionary:
        print(item)

Вывод:

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