Как сопоставить список слов с элементами словаря и вернуть ключ в python? - PullRequest
0 голосов
/ 09 сентября 2018
topic_dic = {

    'Sports': ['play', 'football', 'cricket', 'ball', 'FIFA', 'Basketball', 'Referee', 'Sachin  Tendulkar', 'messi', 'ronaldo', 'EPL', 'manchester united', 'real Madrid', 'juventus', 'contract', 'paul pogba', 'Barcelona', 'transfer'],

    'Politics': ['Barack Obama', 'Donald Trump', 'Prime Minister', 'PM', 'President', 'BJP', 'Amit Shah', 'Lok Sabha', 'Election', 'Modi', 'Government', 'Supreme Court', 'SC', 'India', 'USA', 'Offical', 'Court', 'Legal', 'Judgement'],

    'Science': ['NASA', 'Space', 'James Webb Space', 'Telescope', 'Alien', 'Dawn', 'Mission', 'Galaxy', 'Habitat', 'Magnet', 'Wave', 'Thermals', 'Temperature', 'Orbit', 'Neutrons', 'Mass', 'Discovery'],

    'Social Entertainment': ['Music', 'Dance', 'Singing', 'Concert', 'Audio', 'Playback', 'Competition', 'Movie', 'Drama', 'Theatre'],

    'General Topics': ['Celebrity', 'Culture', 'Society', 'Business', 'Development', 'Country']
}

topics = ['real','retirement','moment,','messi','pogba','play']

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

Как сравнить все элементы темы списка с элементами в словаре и вернуть ключ, в котором элемент соответствует элементу списка ?? Могу ли я хранить ключи в другом массиве?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Решение

new_array ={}

for i in topics:
    for k in topic_dic:
        if i in str(topic_dic[k]):
            print(f"{i} located in {k}")  
            if k not in new_array:
                new_array[k] = [i] 
            elif k in new_array:
                [v.append(i) for v in new_array.values()]

print(new_array)

Обновлено решение, включающее создание нового словаря с найденными key и value, но не уверен, что это то, что вы имели в виду, сохраняя key в новом массиве. Если бы вы могли быть более конкретны с желаемым форматом вывода, это помогло бы.

Выход

(xenial)vash@localhost:~/python/AtBS$ python3.7 loop_info.py 
real located in Sports
messi located in Sports
pogba located in Sports
play located in Sports
{'Sports': ['real', 'messi', 'pogba', 'play']}

Вот также более удобный для чтения формат вашего словаря

topic_dic = {
    'Sports': [
        'play','football','cricket','ball','FIFA','Basketball','Referee',
        'Sachin  Tendulkar','messi','ronaldo','EPL','manchester united',
        'real Madrid','juventus','contract','paul pogba','Barcelona','transfer'
    ],
    'Politics': [
        'Barack Obama','Donald Trump','Prime Minister','PM', 'President',
        'BJP','Amit Shah','Lok Sabha','Election','Modi','Government',
        'Supreme Court','SC','India','USA','Offical','Court','Legal',
        'Judgement'
    ],
    'Science': [
        'NASA','Space','James Webb Space','Telescope','Alien','Dawn',
        'Mission','Galaxy','Habitat','Magnet','Wave','Thermals','Temperature',
        'Orbit','Neutrons','Mass','Discovery'
    ],
    'Social Entertainment': [
        'Music','Dance','Singing','Concert','Audio','Playback',
        'Competition','Movie','Drama','Theatre'
    ],
    'General Topics': [
        'Celebrity','Culture','Society','Business','Development','Country'
    ]
}

topics = ['real','retirement','moment,','messi','pogba','play']
0 голосов
/ 09 сентября 2018

Вы можете использовать следующее понимание слова, чтобы создать соответствие слов в topics их соответствующим категориям:

print({w: k for k, l in topic_dic.items() for t in l for w in topics if w in t})

Возвращает:

{'play': 'Sports', 'messi': 'Sports', 'real': 'Sports', 'pogba': 'Sports'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...