Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 11, 2014 15:47:51

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

поиск в списке словарей

Всем привет
есть такая конструкция:

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

Отредактировано frostspb (Ноя. 11, 2014 16:07:31)

Офлайн

#2 Ноя. 11, 2014 16:08:55

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

поиск в списке словарей


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, если ничего подходящего не найдено.

Офлайн

#3 Ноя. 11, 2014 16:15:54

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

поиск в списке словарей

О, спасибо большое.

Офлайн

#4 Ноя. 11, 2014 18:05:06

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

поиск в списке словарей

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}]



Отредактировано Budulianin (Ноя. 11, 2014 18:10:10)

Офлайн

#5 Ноя. 11, 2014 18:37:51

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

поиск в списке словарей

В моей ситуации там у ключа всегда будет значение

Офлайн

#6 Ноя. 11, 2014 18:44:14

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

поиск в списке словарей

frostspb
В моей ситуации там у ключа всегда будет значение

В списке
tab_gen = [{'personnel':'u_tn'}, {'tabs1': None}]
у всех ключей есть значение.



Отредактировано Budulianin (Ноя. 11, 2014 18:44:56)

Офлайн

#7 Ноя. 11, 2014 18:48:49

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

поиск в списке словарей

Значение отличное от None

Офлайн

#8 Ноя. 11, 2014 19:20:45

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

поиск в списке словарей

Budulianin
Некорректная реализация.
Вы правы.
В моем варианте некорректно отрабатывает на значениях None, False, '', и т.д.
да и код
if dct.get(key):
по с сравнению с
if key in d:
некрасив.
я еще только учусь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version