Группировать массив по значению первого элемента Python - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть 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 ]

0 голосов
/ 21 ноября 2018

Попробуйте:

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']]}

0 голосов
/ 21 ноября 2018

Вы можете сделать это:

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()]
...