Добавить значения к списку в Python? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть такой словарь списков, изначально пустой:

d = dict()

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

if key not in d:
    d[key] = list()
d[key].append(value)

Это кажется ужасно утомительным и подверженным ошибкам, когда нужно написать несколько строк (с помощью функции копирования-вставки или вспомогательной функции).Есть ли более удобный способ?

Если нет «только одного способа сделать это», и вы знаете , вы также можете ответить на него и, возможно, предложить альтернативные способывыполнить выше, даже если они не обязательно лучше.

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

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

То, что вы хотите, называется defaultdict, поскольку доступно в библиотеке коллекций:

Python2.7: https://docs.python.org/2/library/collections.html#defaultdict-examples

Python3.7: https://docs.python.org/3/library/collections.html#collections.defaultdict

Example:
>>> from collections import defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> sorted(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
0 голосов
/ 14 сентября 2018

d[key] = d.get(key, []) + [value]

для объяснения
d.get метод возвращает значение под ключом key и, если есть нет такого ключа, возвращает необязательный аргумент (второй),в этом случае [] (пустой список)

, тогда вы получите список (пустой или нет), а затем добавите к нему список [value].это также может быть сделано с помощью .append(value) вместо + [value]

, имеющего этот список, вы устанавливаете его как новое значение для этой клавиши

например

d = {1: [1, 2]}
d[1] = d.get(1, []) + [8]
# d == {1: [1, 2, 3]}

d[17] = d.get(17, []) + [8]
# d == {1: [1, 2, 3], 17: [8]}
0 голосов
/ 14 сентября 2018
d[key] = list() if (key not in d) else d[key].append(value) 

Использует троичные операторы.И выглядит несколько чище, однако он все еще почти идентичен вашему сценарию.

Прошу прощения, я раньше не думал и использовал стандартные троичные операторы.Я изменил их на троичные операторы Python.

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