группировка по списку в словаре

#python #list #dictionary

Вопрос:

У меня есть два списка

 list1 = ['good_book.sav',  'master_link', 'there_is_link_there', 'book_name.sav', 'something_else']
list2 = ['book', 'link']
 

На основе элементов , доступных в list2 , я хочу сгруппировать элементы list1 , чтобы иметь такой словарь, как,

 grouped_dictionary = {'book': ['good_book.sav', 'book_name.sav'],
                      'link': ['master_link', 'there_is_link_there']}
 

Любая помощь приветствуется.

Ответ №1:

 grouped_dictionary = {key: [word for word in list1 if key in word]
                      for key in list2}
 

Ответ №2:

Вы можете решить эту проблему с помощью dict.setdefault :

 >>> list1 = ['good_book.sav',  'master_link', 'there_is_link_there', 'book_name.sav', 'something_else']
>>> list2 = ['book', 'link']
>>> d = {}
>>> for category in list2:
...   for item in list1:
...     if category in item:
...       d.setdefault(category, []).append(item)
...
>>> d
{'book': ['good_book.sav', 'book_name.sav'], 'link': ['master_link', 'there_is_link_there']}
 

Ответ №3:

смотреть ниже

 from collections import defaultdict

list1 = ['good_book.sav', 'master_link', 'there_is_link_there', 'book_name.sav', 'something_else']
list2 = ['book', 'link']

data = defaultdict(list)
for val in list2:
    for name in list1:
        if val in name:
            data[val].append(name)
print(data)
 

выход

 defaultdict(<type 'list'>, {'book': ['good_book.sav', 'book_name.sav'], 'link': ['master_link', 'there_is_link_there']})
 

Ответ №4:

Попробуй:

 list1 = [
    "good_book.sav",
    "master_link",
    "there_is_link_there",
    "book_name.sav",
    "something_else",
]
list2 = ["book", "link"]

grouped_dictionary = {v: [] for v in list2}
for i in list1:
    for k, v in grouped_dictionary.items():
        if k in i:
            v.append(i)

print(grouped_dictionary)
 

С принтами:

 {
    "book": ["good_book.sav", "book_name.sav"],
    "link": ["master_link", "there_is_link_there"],
}