Получить ключи на основе указанных значений c при использовании списка для хранения значений словаря - PullRequest
0 голосов
/ 20 апреля 2020

Это мой словарь:

 my_dict = {"james": (0,"computer vision", "open cv", "image processing","python",'machine learning'), "jhon": (0,"computer vision", "open cv", "image processing","python",'machine learning'),"Rajeev" : ("python","machine learning","nltk","nlp",1), "bapi": ( 0,"python","machine learning","nltk","nlp") }

Я хочу получить ключ, если значения соответствуют приведенному ниже шаблону, поэтому на выходе должно быть bapi. Я попробовал приведенный ниже код и вывод можно увидеть ниже.

my_color = [0,"python","machine learning","nltk","nlp"]
[k  for k, v in my_dict.items() for j in my_color  if j and 0 in v]
#This is the output
['james',
 'james',
 'james',
 'james',
 'jhon',
 'jhon',
 'jhon',
 'jhon',
 'bapi',
 'bapi',
 'bapi',
 'bapi']

Ответы [ 4 ]

1 голос
/ 20 апреля 2020

Это то, что вы имеете в виду?

[x for x,y in my_dict.items() if y==tuple(my_color)]

Вывод:

['bapi']
0 голосов
/ 20 апреля 2020
In [7]: my_dict = {"james": (0,"computer vision", "open cv", "image processing","python",'machine learnin
       ...: g'), "jhon": (0,"computer vision", "open cv", "image processing","python",'machine learning'),"Ra
       ...: jeev" : ("python","machine learning","nltk","nlp",1), "bapi": ( 0,"python","machine learning","nl
       ...: tk","nlp") }

    In [8]: my_color = [0,"python","machine learning","nltk","nlp"]

    In [9]: [ key for key, val in my_dict.items() if all( j in val for j in my_color ) ]
    Out[9]: ['bapi']

    In [10]:

Редактировать:

"все" принимает список, в котором все значения должны быть истинными, поскольку оно возвращает истину

for e.g. --> all( [True, True] ) will return True
where as --> all([True, False]) = will return False

, поэтому внутри всех, когда я делаю - -> если все (j в val для j в my_color)

в основном я проверяю, существует ли каждое значение в my_color в значении dictionary_item.

--> all( j in val for j in my_color ) 
will be equal to 

--> all( (0 in val) , ('python' in val), ('machine learning' in val) ,('nltk' in val) , ('nlp' in val) )

, если все значения true тогда все вернет true

0 голосов
/ 20 апреля 2020

[x для x, y в my_dict.items (), если y == список (my_color)]

0 голосов
/ 20 апреля 2020

На самом деле вы можете сравнивать целые кортежи без циклического перебора элементов:

print([k for k, v in my_dict.items()  if v == tuple(my_color) ])
...