如何在Python中更新字典中键的值?

如何在Python中更新字典中键的值?,python,dictionary,Python,Dictionary,我有一本代表书店的字典。键表示图书标题,值表示当前图书的份数。当书店出售书籍时,书籍的数量必须减少 我已经编写了一个代码来减少售出图书的数量,但是在更新后打印词典时,我得到的是初始词典,而不是更新后的词典 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

我有一本代表书店的字典。键表示图书标题,值表示当前图书的份数。当书店出售书籍时,书籍的数量必须减少

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

 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
 ch=raw_input("Do you want to sell")
 if (ch in 'yesYES'):
        for i in range(n):
             print"which book you want to sell??",book_shop
             ch1=raw_input("choice")
             if(book_shop.keys()[i]==ch1):
                    book_shop.keys()[i]=(book_shop.values()[i]-1)
                    break

 print book_shop

我想用最简单的方法解决这个问题。我是否遗漏了代码中的任何逻辑或行?

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

>>> books = {}
>>> books['book'] = 3       
>>> books['book'] -= 1   
>>> books   
{'book': 2}   
就你而言:

book_shop[ch1] -= 1

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

您只需为现有键指定另一个值:

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)
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}

我将行:book_-shop.keys()[I]=(book_-shop.values()[I]-1)修改为book_-shop.keys()[I]=1,但仍然不起作用。将其修改为
book_-shop[ch1]=1
谢谢,它起作用了。您能告诉我代码中的错误是什么吗?通过
dict_keys()[index]
引用您的dict有点不可靠,可能与此有关。顺便说一句,在python3中,这种类型的访问已经不可能了,所以通过键直接索引并直接修改我的答案中所示的值可能是个好主意。我使用的是Python2.7,使用dict.keys()[index]的引用字典在这方面也不起作用。那么,这一行:book_shop.keys()[i]=(book_shop.values()[i]-1)是无效的?请您补充几句来解释您的答案好吗?