Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2017 08:42:07

mick_g
Зарегистрирован: 2017-02-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

Добрый день.
Есть список

 'lst = [['Ваня', 'мороженое', 2], ['Петя', 'ручка', 5], ['Ваня', 'карандаш', 3], ['Ваня', 'мороженое', 1], ['Петя', 'конверт', 20], ['Ваня', 'конверт', 5]]'
Нужно сделать вложенный словарь для следующего вывода

Ваня:
карандаш 3
конверт 5
мороженое 3
Петя:
конверт 20
ручка 5

 for i in lst:
    dic[i[0]] = dic.get(i[0],{i[1]:i[2]})

- делает правильную структуру, но не добавляет в словарь новые значения. Как правильно использовать get?

Отредактировано FishHook (Фев. 13, 2017 09:00:22)

Офлайн

#2 Фев. 13, 2017 09:03:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

 lst = [['Ваня', 'мороженое', 2], ['Петя', 'ручка', 5], ['Ваня', 'карандаш', 3], ['Ваня', 'мороженое', 1], ['Петя', 'конверт', 20], ['Ваня', 'конверт', 5]]
dct = {}
for name, thing, count in lst:
    dct.setdefault(name, {})[thing] = count
print(dct)



Офлайн

#3 Фев. 13, 2017 09:12:47

mick_g
Зарегистрирован: 2017-02-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

FishHook
Спасибо, но мороженного у Вани должно стать 3.

Отредактировано mick_g (Фев. 13, 2017 09:19:25)

Офлайн

#4 Фев. 13, 2017 09:52:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

mick_g
Спасибо, но мороженного у Вани должно стать 3.
Ну можно же было догадаться из примера

 lst = [['Ваня', 'мороженое', 2], ['Петя', 'ручка', 5], ['Ваня', 'карандаш', 3], ['Ваня', 'мороженое', 1], ['Петя', 'конверт', 20], ['Ваня', 'конверт', 5]]
dct = {}
for name, thing, count in lst:
    dct.setdefault(name, {}).setdefault(thing, 0)
    dct[name][thing] += count
print(dct)



Офлайн

#5 Фев. 13, 2017 10:43:23

mick_g
Зарегистрирован: 2017-02-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

FishHook
mick_g
Спасибо, но мороженного у Вани должно стать 3.
Ну можно же было догадаться из примера

lst = [, , , , , ]
dct = {}
for name, thing, count in lst:
dct.setdefault(name, {}).setdefault(thing, 0)
dct += count
print(dct)

Спасибо. А с помощью get метода можно?

Офлайн

#6 Фев. 13, 2017 10:45:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

mick_g
А с помощью get метода можно?
Вы собираетесь с помощью get устанавливать значение? Не понимаю.



Офлайн

#7 Фев. 13, 2017 10:58:14

mick_g
Зарегистрирован: 2017-02-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

FishHook
mick_g
А с помощью get метода можно?
Вы собираетесь с помощью get устанавливать значение? Не понимаю.

Да. Второй параметр метода устанавливает значение по-умолчанию.
Написал так:
for name, thing, count in lst:
dic.get(name, {}).get(thing, 0) + count

но не работает.

Отредактировано mick_g (Фев. 13, 2017 11:02:29)

Офлайн

#8 Фев. 13, 2017 11:06:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

mick_g
но не работает.
И не будет. С помощью гета значения получают, само слово об этом говорит, а не устанавливают.



Офлайн

#9 Фев. 13, 2017 11:13:56

mick_g
Зарегистрирован: 2017-02-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

FishHook
И не будет. С помощью гета значения получают, само слово об этом говорит, а не устанавливают.

Преимущество метода в том, что кроме ключа он может принимать и второй аргумент — значение, которое вернётся, если заданного ключа нет:

numbers =
counts = {}
for number in numbers:
counts = counts.get(number, 0) + 1

Поэтому я и хотел благодаря вашей помощи использовать такое выражение:
dic = dic.get(name, {}).get(thing, 0) + count

Но оно не работает.

Отредактировано mick_g (Фев. 13, 2017 11:15:43)

Офлайн

#10 Фев. 13, 2017 11:18:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Метод get для вложенного словаря

mick_g
С помощью get вы можете получить значение. Записать это значение с помощью get вы не сможете, вам надо будет использовать какой-либо из способов установить значение словаря: update, setdefault, __setitem__ или

 dct[a] = b
.
Что тут непонятного то?



Отредактировано FishHook (Фев. 13, 2017 11:19:11)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version