【问题标题】:How to update the value of a key in a dictionary in Python?如何在 Python 中更新字典中键的值?
【发布时间】:2017-04-25 03:05:02
【问题描述】:

我有一本代表书店的字典。键代表书名,值代表当前图书的副本数。当书从书店售出时,书的份数必须减少。

我编写了一个代码来减少已售图书的份数,但在更新后打印字典时,我得到的是初始字典,而不是更新后的字典。

 n = input("Enter number of books in shop: ")

 book_shop = {} # Creating a dictionary book_shop

 # Entering elements into the dictionary
 for i in range(n):
     book_title = raw_input("Enter book title: ")
     book_no = input("Enter no of copies: ")
     book_shop[book_title] = book_no

 choice = raw_input("Do you want to sell?")
 if (choice in 'yesYES'):
        for i in range(n):
             print("Which book do you want to sell: ", book_shop)
             ch1 = raw_input("Enter your choice: ")
             if(book_shop.keys()[i] == ch1):
                    book_shop.keys()[i] = (book_shop.values()[i]-1)
                    break
        
 print(book_shop)

我想以最简单的方式解决问题。我是否遗漏了代码中的任何逻辑或任何一行?

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    你可以通过引用键直接从值中减去。我认为哪个更简单。

    >>> books = {}
    >>> books['book'] = 3       
    >>> books['book'] -= 1   
    >>> books   
    {'book': 2}   
    

    在你的情况下:

    book_shop[ch1] -= 1
    

    【讨论】:

    • 我将这行:book_shop.keys()[i]=(book_shop.values()[i]-1) 修改为 book_shop.keys()[i]-=1,但还是这样好像没用。
    • 修改为book_shop[ch1] -= 1
    • 谢谢,它成功了。你能告诉我我的代码有什么错误吗??
    • 通过dict_keys()[index] 引用您的字典有点不靠谱,可能与此有关。顺便说一句,在 python3 中,这种访问类型不再可能,因此最好通过键直接索引并直接修改值,如我的答案所示。
    • 我使用的是 python 2.7,使用 dict.keys()[index] 的引用字典也不起作用。那么,这行: book_shop.keys()[i]=(book_shop.values()[i]-1) 无效?
    【解决方案2】:
    d = {'A': 1, 'B': 5, 'C': 2}
    d.update({'A': 2})
    

    打印(d)

    {'A': 2, 'B': 5, 'C': 2}
    

    【讨论】:

      【解决方案3】:

      您正在修改列表book_shop.values()[i],该列表未在字典中更新。每当您调用values() 方法时,它都会为您提供字典中可用的值,这里您不会修改字典的数据。

      【讨论】:

        【解决方案4】:
        n = eval(input('Num books: '))
        books = {}
        for i in range(n):
            titlez = input("Enter Title: ")
            copy = eval(input("Num of copies: "))
            books[titlez] = copy
        
        prob = input('Sell a book; enter YES or NO: ')
        if prob == 'YES' or 'yes':
            choice = input('Enter book title: ')
            if choice in books:
                init_num = books[choice]
                init_num -= 1
                books[choice] = init_num
                print(books)
        

        【讨论】:

        • 您能补充几句话来帮助解释您的答案吗?
        【解决方案5】:

        您可以简单地为现有键指定另一个值:

        t = {}
        t['A'] = 1
        t['B'] = 5
        t['C'] = 2
        
        print(t)
        
        {'A': 1, 'B': 5, 'C': 2}
        

        现在让我们更新其中一个键:

        t['B'] = 3
        
        print(t)
        
        {'A': 1, 'B': 3, 'C': 2}
        

        【讨论】:

          猜你喜欢
          • 2011-07-02
          • 2022-07-24
          • 2021-10-07
          • 1970-01-01
          • 2021-07-28
          • 2018-11-11
          • 2019-07-15
          • 2012-04-24
          • 1970-01-01
          相关资源
          最近更新 更多