2015-02-07 110 views
-1

我在制作一个虚假的ATM模拟器。我有以下代码将被保存到一个文件并存储假装用户名称,引脚和余额。更改字典中的值python 2.7

bank = {'bob':[1122,0],'fred':[2211,0]} 

当程序,如果用户将钱存入(例如鲍勃存款£10)我需要第二个值更新运行。所以它会读'bob':[1122,10]

我是相当新的编码,我试过 - bank.values [0][1] = 10但没有奏效。

+4

你应该为Google的Python词典教程。 – imallett 2015-02-07 20:00:25

回答

2

你引用一个词典通过其而不是指数(像列表或元组)。你可以简单地做:

bank['bob'][1] = 10 # 'bob' is the key 
+0

是的,更新了价值,现在完美。辉煌。 – 2015-02-07 20:03:39

0

因为它们是无序的容器,所以不能依赖字典的顺序。因此,您不能使用索引访问给定项目,因为索引是无意义的(因为它意味着顺序)。您将不得不使用该键更改该值以检索该项目。

bank['bob'] = [1122, 10] 

或者修改只在第二项

bank['bob'][1] = 10 
4

错误在你的程序

你缺少的电话...这是bank.values()返回值的列表,而不是bank.values。但是这样做是错误的,因为你将失去插入值的顺序,所以[0]不一定是第一个值。

做的正确的方式,

做它,正确的方法应该是

>>> bank['bob'][1] = 10 
>>> bank['bob'][1] 
10 

小思想 - 更新账户余额

bank['bob'][1] = 10仅会覆盖列表的原始内容。所以如果鲍勃再次存款20,那么他的余额将只有20而不是10+20这是30。所以,你应该不是做

>>> bank['bob'][1] += 10 

接下来的存款将成为

>>> bank['bob'][1] += 20 

所以在这种方式,你可以实际存储余额准确

+1

Geezus 3在46秒内降落。这个答案最接近OP的问题,伙计们。 – imallett 2015-02-07 20:02:20

+2

好吧,FWIW,你绝对是最完整,最准确和最有帮助的答案 - 不要在OP的问题中确实调用“.values”。从我+1。 – imallett 2015-02-07 20:08:26

+0

@imallett谢谢......但更多人不同意这一点。希望他们在 – 2015-02-07 20:09:33

1

忘记手动创建0的,只是追加时的值使用密钥/客户名称添加付款:

bank = {'bob':[1122],'fred':[2211]} 

bank["bob"].append(10) # append to bobs list 

print(bank) 
{'fred': [2211], 'bob': [1122, 10]} 

另外bank.values实际上并没有调用该方法。您错过了调用方法bank.values()所需的参数,但正如我已经提到的,追加是一种更简单的解决方案。

使用bank['bob'][1] = 10表示您将始终更改第二个元素,因此您将永远无法添加两个以上的值,因为分配只会覆盖先前的值。