2016-01-12 2 views

ответ

7

Для вашего

lst = [('apple', 1), ('banana', 2), {'k': [1,2,3]}, {'l': [4,5,6]}] 

с использованием

next(elem for elem in lst if isinstance(elem, dict) and 'k' in elem) 

возвращается

{'k': [1, 2, 3]} 

т.е. первый объект из вас r, который является словарем и содержит ключ «k».

Это поднимает StopIteration, если такой объект не найден. Если вы хотите вернуть что-то еще, например. None, используйте:

next((elem for elem in lst if isinstance(elem, dict) and 'k' in elem), None) 
6
def return_dict(lst): 
    for item in lst: 
     if isinstance(item,dict) and 'k' in item: 
      return item 
    raise Exception("Item not found") 
0

Если вы не против того, чтобы быть немного некрасиво в вашем коде я бы итерацию по списку и проверить каждый элемент. Пример:

def find_dict(lst): 
    for element in lst: 
     if type(element) == dict: 
      if 'k' in element.keys(): 
       return element 

Для этого, вероятно, должен быть более пуфонический путь.

+1

Взял слишком много времени, набрав это .. teamProbable выигрывает! – Skirrebattie

 Смежные вопросы

  • Нет связанных вопросов^_^