Как получить доступ к значениям словаря, когда ключ не совсем тот же? - PullRequest
2 голосов
/ 27 мая 2020

Проблема

У меня есть такой словарь:

dic = {'9.1':'9.7','10.1':'10.7','11.1':'11.7'}

И мне нужно получить доступ со значениями в другом формате:

val_1 = '9.1'
val_2 = '09.1'

Если val_1 это легко получить значение:

>>>print(dic[val_1])
>>>9.7

Но, если ключ val_2 не существует

Могу ли я использовать что-то вроде этого?

dic[float(val_2),key = lambda x: float(x) for x in dic.keys()]

Дополнительная информация

Формат ключей словаря может отличаться. Примеры:

dic = {'9':'9.7'}   
dic = {'9.0':'9.7'}
dic = {'09.0':'9.7'}

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 мая 2020

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

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

>>> dic = {'9.1':'9.7','10.1':'10.7','11.1':'11.7'}
>>> dic = {float(k):v for k,v in dic.items()}
>>> dic[float("09.1")]
'9.7'

Конечно это может потерпеть неудачу из-за точности с плавающей запятой, поэтому на самом деле это не очень хорошая идея, но это будет работать, если различные формы записи значения имеют только начальный или конечный ноль, пробел ... так что представление значения с плавающей запятой будет быть точно таким же. В примере с 9 написанными разными способами это тоже будет работать:

>>> float('09.0') == float('9.0') == float('9')
True
0 голосов
/ 27 мая 2020

В этом примере вы храните свои ключи в виде строк. В этом случае проще всего удалить начальный ноль из примера val_2:

val_2.lstrip("0")

Вы можете вызвать этот метод для строк, которые не имеют начальные нули, без побочных эффектов. Итак, вы можете сделать это:

for val in [val_1, val_2]:
    print(dic[val.lstrip("0")])

с выводом:

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