Группировать массив по значению первого элемента Python
У меня есть Array arr = [title, fileurl], поэтому, когда я делаю print arr, это выглядит так:
['name1', 'url1']
['name1', 'url2']
['name1', 'url3']
['name2', 'url1']
['name2', 'url2']
['name3', 'url1']
Я хотел бы сгруппировать эти массивы по первому элементу, это значит, что я хотел бы иметь:
['name1', 'url1', 'url2', 'url3']
['name2', 'url1', 'url2']
['name3', 'url1']
Мой код:
for final in posterlink:
pagesourcec = requests.get(final)
soupc = BeautifulSoup(pagesourcec.text, "html.parser")
strc = soupc.findAll("iframe", attrs={"id": "myframe"})
title = soupb.find("li",{"class": "breadcrumb-item active"}).get_text()
for embedlink in strc:
fff = embedlink.get('data-src')
arr = [title, fff]
print arr
2 ответа
Вы можете сделать это:
from collections import defaultdict as ddict
group = ddict(list)
for name, url in arr:
group[name].append(url)
И если вы абсолютно хотите, чтобы это был список списков, вы можете выполнить следующее:
group = [[name, *urls] for name, urls in group.items()]
Изменить: Важно отметить, что приведенная выше строка работает с Python 3, который вы должны использовать в любом случае. Однако для полноты картины, если вы используете Python 2.7, используйте следующее:
group = [[name] + urls for name, urls in group.items()]
Попробуй это:
a = [['name1', 'url1'],
['name1', 'url2'],
['name1', 'url3'],
['name2', 'url1'],
['name2', 'url2'],
['name3', 'url1']]
d = {}
for elem in a:
if elem[0] not in d:
d[elem[0]] = []
d[elem[0]].append(elem[1:])
Выход:
{'name1': [['url1'], ['url2'], ['url3']],
'name2': [['url1'], ['url2']],
'name3': [['url1']]}