[英]Accessing values in dictionary of counters - python?
我有一個這樣的Counters字典:
dictofcounters = {'a':{'a':4,'b':2,'c':0},
'b':{'a':3,'b':9}
'c':{'a':0,'b':0, 'c':4}}
我想在以下位置找到值:
我嘗試了以下方法,但是還有其他方法可以實現相同的價值嗎?
dictofcounters = {'a':{'a':4,'b':2,'c':0},
'b':{'a':3,'b':9}
'c':{'a':0,'b':0, 'c':4}}
query = 'c'
# value where key == value == query.
print dictofcounters[query][query]
# sum of value where value == query.
print sum(dictofcounters[i][query] for i in dictofcounters)
# sum of value where key==query and key != value.
print sum(i for i in dictofcounters[query] if i != query)
所需的輸出應為:
4
0
0
如果query = 'b'
,則輸出應為:
9
2
3
您可以改善代碼的一件事是使用函數。 例如:
def getQueryQuery(dictofcounters, query):
# value where key == value == query.
return dictofcounters.get(query, {}).get(query, 0)
def getSumOfQueryFromAll(dictofcounters, query):
# sum of value where value == query.
return sum(dictofcounters[i].get(query, 0) for i in dictofcounters)
def getQueryExceptForQuery(dictofcounters, query):
# sum of value where key==query and key != value.
return sum(i for i in dictofcounters.get(query, {}) if i != query)
此處的另一項改進是,通過使用字典的get
方法,您可以提供默認值。 如果查詢沒有值,這使您可以提供0或空的字典。
您還可以使用另一個方法來調用這三個方法中的每一個並打印或返回結果:
def getAllDesiredQueryValues(dictofcounters, query):
if you_want_to_print:
print getQueryQuery(dictofcounters, query)
...
else:
return (getQueryQuery(dictofcounters, query), getSumOfQueryFromAll(dictofcounters, query), getQueryExceptForQuery(dictofcounters, query))
有關為什么您可能想使用dict.get(i)
而不是dict[i]
:
>>> myDict = {'a':1}
>>> myDict['a']
1
>>> myDict.get('a')
1
>>> myDict.get('a', 'defaultvalue')
1
>>> myDict['b']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'b'
>>> myDict.get('b')
>>> myDict.get('b', 'defaultvalue')
'defaultvalue'
如您所見,如果字典具有鍵,它們將執行相同的操作。 但是,如果字典缺少鍵,則dict[i]
將引發異常,而dict.get(i)
將返回None
。 如果給dict.get
提供第二個參數,則如果缺少鍵,它將返回該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.