Есть ли хорошая идиома для добавления нового списка или добавления в список (если есть) в словаре? - PullRequest
4 голосов
/ 16 февраля 2012

Это второй раз, когда я внедряю нечто подобное, и я подозреваю, что должен быть лучший (читай: более питонический) способ сделать это:

phone_book = {}

def add_number(name,number):
  if name in phone_book:
    phone_book['name'].append(number)
  else:
    phone_book['name'] = [number]

Я понимаю, что код, вероятно, можно сделать более лаконичным с помощью условных присвоений, но я подозреваю, что, вероятно, есть лучший способ сделать это. Я не заинтересован только в том, чтобы сделать код короче.

Ответы [ 2 ]

8 голосов
/ 16 февраля 2012

Да, вы можете использовать defaultdict. С этим подклассом dict при доступе к элементу в словаре, если значение еще не существует, оно автоматически создает его с помощью указанной вами функции конструктора.

from collections import defaultdict
phone_book = defaultdict(list)

def add_number(name, number):
    phone_book[name].append(number)
7 голосов
/ 16 февраля 2012

Использовать dict setdefault вот так:

phone_book.setdefault('name', []).append(number)
...