@Alex_888

Как получить значения из словаря, изначально неизвестному количеству переменных (ключей)?

Получаю строку и раскладываю ее на переменные. Изначально количество переменных неизвестно.
with open('файл.txt', encoding='utf-8-sig') as f:
        for line in f:
            line = line.rstrip()
            key, value = line.split(':')
            myList[key] = value
    var1, var2 = key.split('#')
    str_arr = var2.split("_")
    mydict = {}
    for index in range(len(str_arr)):
        mydict["var_%d" %index] = str_arr[index]

Получаю:
var_0: val_0
var_1: val_1
var_1: val_2 ...

и так далее...
После мне нужно, по каждой полученной переменной найти значение в другом словаре, и передать в клавиатуру
with open("файл_2.txt", encoding='utf-8-sig') as f:
        for line in f:
            line = line.rstrip()
            key, value = line.split(':')
            stringList[key] = value
   #--------------------------------------
Вот тут должно быть получения VAR по ключам <i>(val_0, val_1,val_2 ....)</i>
 #---------------------------------------- 
   prMarkup = types.InlineKeyboardMarkup()
    for key, value in stringList.items():
       myMarkup.add(types.InlineKeyboardButton(text=value + VAR ,callback_data=key ))


Как получить, не понимаю. Получаю только одно VAR, при чем 4 раза
  • Вопрос задан
  • 291 просмотр
Решения вопроса 1
@Taus
Если вам нужно обращаться и по ключам var_X и по значениям val_X, то создайте ещё один словарь для хранения обратного отношения val_X -> var_X.
var_dict = {val: var for var, val in mydict.items()}
...
var_dict['val_0'] # returns var_0


# update, добавил ответ из комментариев
За неимением понятных названий переменных :)
mydict # словарь из файла `файл.txt`
stringList # "другой" словарь
dict_for_keyboard = {key: stringList[key] for key in mydict.values()}
...
myMarkup = types.InlineKeyboardMarkup() # опечатка prMarkup?
for key, value in dict_for_keyboard.items():
    myMarkup.add(types.InlineKeyboardButton(text=value + VAR ,callback_data=key ))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы