Найти - Пользователи
Полная версия: поиск в списке словарей
Начало » Python для новичков » поиск в списке словарей
1
frostspb
Всем привет
есть такая конструкция:

tab_gen = [{'personnel':'u_tn'}, {'tabs1':'obj_id'}]

хочу написать ф-ю куда бы я мог подать ключ, а она мне возвращала значение
def get_gen_name(table_name):

в идеале должно выглядеть вотк

print get_gen_name('tabs1')
obj_id

но никак не могу понять, как красиво в питоническом стиле реализовать поиск в таком списке разнородных словарей

накидал что то типа

def get_gen_name(table_name):
    for x in tab_gen:
        if table_name in x.keys():
            return x.values()
        else:
            return -1

но она всегда возвращает -1
botinag

tab_gen = [{'personnel':'u_tn'}, {'tabs1':'obj_id'}]
def get_gen_name(key, lst=tab_gen):
    for dct in lst:
        if dct.get(key):
            return dct[key]
>>> print get_gen_name('tabs1')
obj_id
Возвращает первый попавший результат или None, если ничего подходящего не найдено.
frostspb
О, спасибо большое.
Budulianin
def find_key(key, lst):
    for d in lst:
        if key in d:
            return d[key]
    else:
        raise Exception('key "{}" not found'.format(key))


botinag
Возвращает первый попавший результат или None, если ничего подходящего не найдено.
Некорректная реализация.

tab_gen = [{'personnel':'u_tn'}, {'tabs1': None}]
frostspb
В моей ситуации там у ключа всегда будет значение
Budulianin
frostspb
В моей ситуации там у ключа всегда будет значение

В списке
tab_gen = [{'personnel':'u_tn'}, {'tabs1': None}]
у всех ключей есть значение.
frostspb
Значение отличное от None
botinag
Budulianin
Некорректная реализация.
Вы правы.
В моем варианте некорректно отрабатывает на значениях None, False, '', и т.д.
да и код
if dct.get(key):
по с сравнению с
if key in d:
некрасив.
я еще только учусь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB