Найти - Пользователи
Полная версия: Метод get для вложенного словаря
Начало » Python для новичков » Метод get для вложенного словаря
1 2
mick_g
Добрый день.
Есть список
 '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
 lst = [['Ваня', 'мороженое', 2], ['Петя', 'ручка', 5], ['Ваня', 'карандаш', 3], ['Ваня', 'мороженое', 1], ['Петя', 'конверт', 20], ['Ваня', 'конверт', 5]]
dct = {}
for name, thing, count in lst:
    dct.setdefault(name, {})[thing] = count
print(dct)
mick_g
FishHook
Спасибо, но мороженного у Вани должно стать 3.
FishHook
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)
mick_g
FishHook
mick_g
Спасибо, но мороженного у Вани должно стать 3.
Ну можно же было догадаться из примера

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

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

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

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

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

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

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

Но оно не работает.
FishHook
mick_g
С помощью get вы можете получить значение. Записать это значение с помощью get вы не сможете, вам надо будет использовать какой-либо из способов установить значение словаря: update, setdefault, __setitem__ или
 dct[a] = b
.
Что тут непонятного то?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB