Как написать функцию, которая добавляет список в словарь? - PullRequest
1 голос
/ 22 марта 2019

занятых программистов в этом замечательном сообществе.

Я пытался выполнить задание из книги под названием "Автоматизация скучных вещей".И здесь я пытаюсь добавить этот список dragonLoot [] в словарь itemsSatchel {}.Я попытался использовать этот атрибут обновления после того, как изменил список на словарь, но это не удалось, поэтому я действительно не знаю, что с этим делать.ПОМОГИТЕ!

import pprint

itemsSatchel = {'Arrow': 12,
                'Gold Coin': 42,
                'Rope': 1,
                'Torch': 6,
                'Dagger':1}

dragonLoot = ['Gold Coin',
              'Gold Coin'
              'Dagger'
              'Gold Coin',
              'Ruby']

def addToSatchel(self):
    #This part is my pain in the ___#


def displaySatchel(self):
    print("Inventory: ")
    itemsCounter = 0
    for k,v in itemsSatchel.items() :
        pprint.pprint(str(v) + ' ' + str(k))
        itemsCounter += v
    print('Total number of items: ' + str(itemsCounter))

addToSatchel({dragonLoot})

displaySatchel(itemsSatchel)

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Вы можете также рассмотреть использование collections.Counter здесь.Его можно инициализировать или обновить из dict или списка элементов.

from collections import Counter

itemsSatchel = Counter({'Arrow': 12,
                        'Gold Coin': 42,
                        'Rope': 1,
                        'Torch': 6,
                        'Dagger':1})

dragonLoot = ['Gold Coin', ...]

def addToSatchel(items):
    itemsSatchel.update(items)

addToSatchel(dragonLoot)

0 голосов
/ 22 марта 2019

Попробуйте просмотреть элементы в вашем массиве и увеличить значение этого же элемента в словаре на 1, если он там существует, или просто установить 1, если его там нет.

вот так:

# Hello World program in Python
import pprint

itemsSatchel = {'Arrow': 12,
                'Gold Coin': 42,
                'Rope': 1,
                'Torch': 6,
                'Dagger':1}

dragonLoot = ['Gold Coin',
              'Gold Coin',
              'Dagger',
              'Gold Coin',
              'Ruby']

def addToSatchel():
    for item in dragonLoot:
        if item in itemsSatchel:
            itemsSatchel[item] += 1
        else:
            itemsSatchel[item] = 1 

def displaySatchel():
    print("Inventory: ")
    itemsCounter = 0
    for k,v in itemsSatchel.items() :
        pprint.pprint(str(v) + ' ' + str(k))
        itemsCounter += v
    print('Total number of items: ' + str(itemsCounter))

addToSatchel()

displaySatchel()

Ура!

0 голосов
/ 22 марта 2019

Сначала удалите аргументы "self", это не методы класса, а функциональность программирования. Теперь, если я вас правильно понимаю, вы можете попытаться сделать что-то вроде:

def addToSatchel():
    for el in dragonLoot:
        itemsSatchel[el] = itemsSatche.setdefault(el, 0) + 1    

def displaySatchel():
    ...
    ...

звонки должны быть:

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