2012-12-10 89 views
0

我希望能夠結合列出的數據字典項目(點池,力量,生命,智慧,敏捷)的值,並確保它們的總和不超過30的值。我可以派生項目數據字典,但我不知道如何將它們加在一起以確保它們的總和不超過30的數值,然後在執行動作之前對其進行測試。add dict_values

variables=(attributes.values()) 
print(variables) 
dict_values(['0', '30', '0', '0', '0']) 
variables=items(attributes.values()) 

我想將字典值添加在一起,並將它們分配給我將用作一個while條件的變量。由於

+0

我不是你問什麼是很清楚... –

回答

0
>>> variables=attributes.values() 
>>> print(variables) 
dict_values(['0', '30', '0', '0', '0']) 
>>> print(sum(variables)) 
030000 
>>> # Oops, you're adding strings; we want to convert them to ints... 
>>> print(sum(int(variable) for variable in variables)) 
30 
>>> if sum(int(variable) for variable in variables) > 30: 
...  print('Cheater!') 
... else: 
...  print('OK') 
OK 

如果你不知道的和功能沒有,這裏是你如何可以把它明確寫入:

total = 0 
for value in attributes.values(): 
    total += int(value) 
if value > 30: 
    … 
+0

真棒,謝謝 –

0

我不能完全肯定,如果我正確地解釋你;你應該讓你的問題更精確,更清晰。如果你

dic = {'Key1':1,'Key2':5,'Key3':8} 
vals = dic.values() 
if sum(vals) > 30: 
    # do something 

不過,我覺得你問的是檢查字典的值的總和,看它是否是大於30。如果是這樣的聲明,認爲這檢查只有某些鍵,然後看看這個:

dic = {'Key1':1,'Key2':5,'Key3':8} 
vals = map(lambda x:x[1],filter(lambda x:x[0] in ['Key1','Key2'],dic.items())) 
if sum(vals) > 30: 
    # do something 

請進一步澄清您的問題!

+0

調用'用lambda表達式map'了'filter'到位的' itemgetter',如果你可以在['Key1','Key2'])'中使用'(v for(k,v)in dic.items()讓我猜猜,你只是使用Python,因爲有人告訴你,你不能再在Lisp找到工作了? – abarnert

+0

你的第一個反應是我需要檢查字典的值的總和,看它是否大於30.謝謝 –

+0

abarnet - 列表解析難以閱讀! :p – Shariq

1

我想你的意思是這樣的:

char_info = {'Pool': '5', 'Strength': '10', 'Health': '3', 'Wisdom': '1', 'Dexterity': '2'} 
if sum(int(x) for x in char_info.values()) > 30: 
    print 'Too many points!'