Pythonical добавление ключей к dict - PullRequest
0 голосов
/ 27 июня 2018

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

d = OrderedDict()
for i, v in enumerate(s):
   if v not in d:
      d[v] = 1
   else:
      d[v] += 1

Как я могу сделать это с 1 строкой кода, используя setdefault, а не collections. Counter Например, если бы это был список, я мог бы сделать,

d.setdefault(v, []).append()

Есть ли способ сделать подобное с целочисленным сложением.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Если мы хотим перейти на oneliner и нам разрешено использовать itertools :

import itertools

s = [1, 2, 3, 4, 5, 6, 7, 12, 4, 7, 3]

d = {key: len(list(items)) for key, items in itertools.groupby(sorted(s))}
0 голосов
/ 27 июня 2018

Просто используйте заказной счетчик. Если вы счастливы импортировать OrderedDict, нет причин, по моему мнению, вам следует избегать Counter.

from collections import OrderedDict, Counter

class OrderedCounter(Counter, OrderedDict):
    pass

s = [3, 1, 3, 1, 2, 3, 4]

d = OrderedCounter(s)

print(d)

OrderedCounter({3: 3, 1: 2, 2: 1, 4: 1})

Заметьте, в Python 3.7+ вы можете просто использовать Counter, так как словари упорядочены по вставке.

0 голосов
/ 27 июня 2018

Вы можете сделать что-то вроде этого:

d[v] = d.get(v, 0) + 1
...