Python check if value is in a list of dicts

后端 未结 5 1416
陌清茗
陌清茗 2021-02-08 23:56

I have a list of dicts e.g.

[{\'name\':\'Bernard\',\'age\':7},{\'name\':\'George\',\'age\':4},{\'name\':\'Reginald\',\'age\':6}]

I\'d like to c

相关标签:
5条回答
  • 2021-02-09 00:31

    The Proper Solution

    There is a much more efficient way to do this than with looping. If you use operators.itemgetter you can do a simple if x in y check

    #to simply check if the list of dicts contains the key=>value pair
    'George' in map(itemgetter('name'), list_of_dicts)
    
    #if you want to get the index 
    index = map(itemgetter('name'), list_of_dicts).index("George") if 'George' in map(itemgetter('name'), list_of_dicts) else None
    
    0 讨论(0)
  • 2021-02-09 00:31

    I think a list comprehension would do the trick here too.

    names = [i['name'] for i in l]
    

    Then use it like so:

    'Bernard' in names (True)
    'Farkle' in names (False)
    

    Or a one liner (If it's only one check)

    'Bernard' in [i['name'] for i in l] (True)
    
    0 讨论(0)
  • 2021-02-09 00:38

    No, there cannot be a more efficient way if you have just this list of dicts.

    However, if you want to check frequently, you can extract a dictionary with name:age items:

    l = [{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
    d = dict((i['name'], i['age']) for i in l)
    

    now you have d:

    {'Bernard': 7, 'George': 4, 'Reginald': 6}
    

    and now you can check:

    'Harold' in d   -> False
    'George' in d   -> True
    

    It will be much faster than iterating over the original list.

    0 讨论(0)
  • 2021-02-09 00:49
    l = [{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
    search_for = 'George'
    print True in map(lambda person: True if person['name'].lower() == search_for.lower() else False, l )
    
    0 讨论(0)
  • 2021-02-09 00:49
    smf = [{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
    def names(d):
        for i in d:
            for key, value in i.iteritems():
                 if key == 'name':
                     yield value
    
    
    In [5]: 'Bernard' in names(smf)
    Out[5]: True
    
    
    In [6]: 'Bernardadf' in names(smf)
    Out[6]: False
    
    0 讨论(0)
提交回复
热议问题