How to compare list values with dictionary keys and make a new dictionary of it using python

后端 未结 2 450
我寻月下人不归
我寻月下人不归 2020-12-17 01:23

I have a list like this:

lis = [\'Date\', \'Product\', \'Price\']

I want to compare it with:

dict = {\'Date\' : \'2013-05-0         


        
相关标签:
2条回答
  • 2020-12-17 01:55

    Treat lis as a set instead, so you can use dictionary views and an intersection:

    # python 2.7:
    n = {k: d[k] for k in d.viewkeys() & set(lis)}
    
    # python 3:
    n = {k: d[k] for k in d.keys() & set(lis)}
    

    Or you could use a simple dict comprehension with a in test against d:

    # python 2.6 or older:
    n = dict((k, d[k]) for k in lis if k in d)
    
    # python 2.7 and up:
    n = {k: d[k] for k in lis if k in d}
    

    This presumes that not all values in lis are going to be in d; the if k in d test can be dropped if they are always going to be present.

    For your specific case, the second form is quite a lot faster:

    >>> from timeit import timeit
    >>> timeit("{k: d[k] for k in d.viewkeys() & s}", 'from __main__ import d, lis; s=set(lis)')
    2.156520128250122
    >>> timeit("{k: d[k] for k in lis if k in d}", 'from __main__ import d, lis')
    0.9401540756225586
    
    0 讨论(0)
  • 2020-12-17 02:15
    filtered_dict = dict((k, original_dict[k]) for k in lis if k in original_dict)
    

    Or if you have 2.7+:

    filtered_dict = {k: original_dict[k] for k in lis if k in original_dict}
    

    If you want to use a generator:

    item_generator = ((k, original_dict[k]) for k in lis if k in original_dict)
    

    The generator will yield (key, value) pairs.

    0 讨论(0)
提交回复
热议问题