Вопрос о питонеКак сгруппировать похожие строки? - PullRequest
1 голос
/ 19 января 2011
for i in names:
    dict[i] = {'firstname': name[i]['firstname'],
               'lastname': name[i]['lastname']}
    print dict[0]['firstname'] # John
    print dict[0]['lastname'] # Doe

    # group similar lastnames, along with their firstnames
    # ...
return render_to_response('index.html', dict)

Я хочу сгруппировать имена, которые заканчиваются похожими фамилиями.Например, выходные данные должны быть:

<html>
  <body>
    <h1> Doe </h1>
    <p> John, Jason, Peter </p>

    <h1> Avery </h1>
    <p> Kelly, Brittany </p>
  </body>
</html>

Предполагается, что теги 'h1' должны содержать фамилии, а теги 'p' - имена.

Как следуетсделать это?

Ответы [ 2 ]

6 голосов
/ 19 января 2011

Вы имеете в виду что-то вроде этого:

import collections

data = [
    {'firstname': 'John', 'lastname': 'Smith'}, 
    {'firstname': 'Samantha', 'lastname': 'Smith'}, 
    {'firstname': 'shawn', 'lastname': 'Spencer'},
]

new_data = collections.defaultdict(list)

for d in data:
    new_data[d['lastname']].append(d['firstname'])

print new_data

Вывод:

defaultdict(<type 'list'>, {'Smith': ['John', 'Samantha'], 'Spencer': ['shawn']})

в вашем шаблоне сделать:

{% for lastname, firstname in data.items %}
    <h1> {{ lastname }} </h1>
    <p> {{ firstname|join:", " }} </p>
{% endfor %}

вывод:

<h1> Smith </h1>
<p> John, Samantha </p>

<h1> Spencer </h1>
<p> shawn </p>
1 голос
/ 19 января 2011

Вы также можете использовать groupby после сортировки имен.Вы можете увидеть это здесь: http://docs.python.org/library/itertools.html#itertools.groupby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...