Рекомендуемый метод для группировки строк sqlite.Row - PullRequest
0 голосов
/ 23 марта 2019

Учитывая следующий список (из запроса sqlite):

[('job1', 'location1', 10), 
('job1', 'location2', 10),
('job2', 'location1', 5),
('job3', 'location1', 10),
('job3', 'location3', 10)]

Я бы хотел, чтобы в моем шаблоне tpl было отображено следующее:

job1
location1: 10
location2: 10

job2
location1: 5

job3
location1: 10
location3: 10

Я, вероятно, могу получитьэто делается с помощью setdefault

d = {}

for job in jobs:
    d.setdefault(job[0], {}).update({job[1]: job[2]})

, но мне интересно, каков стандартный или лучший способ сделать это?

Приветствия,

1 Ответ

1 голос
/ 25 марта 2019

Вот как я бы сделал ваш код более Pythonic:

from collections import defaultdict

d = defaultdict(dict)

for (job_id, location, value) in jobs:
    d[job_id][location] = value

# if you need an actual dict at the end (and not a defaultdict),
# use d = dict(d)

Что я изменил:

  1. Использовать defaultdict .
  2. Используйте распаковку кортежей для дополнительной читаемости.
...