我已經一個字典結構類似於[A] [B] =(C),例如:使用二級密鑰總結字典值
{'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}
我想什麼能夠做的是搜索由[b]鍵並對相應的c進行求和。所以我會得到以下輸出:
1:9,2:6,3:6 ...等等。
這是否需要重組字典?
我已經一個字典結構類似於[A] [B] =(C),例如:使用二級密鑰總結字典值
{'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}
我想什麼能夠做的是搜索由[b]鍵並對相應的c進行求和。所以我會得到以下輸出:
1:9,2:6,3:6 ...等等。
這是否需要重組字典?
,您可以在其上類型的字典和總結值使用collections.defaultdict
每個鍵的字典中的值進行迭代。然後,你只需訪問結果字典找出加值爲每個鍵,無需搜索:
from collections import defaultdict
d = {'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}
result = defaultdict(int)
for i in d.values():
for j in i:
result[j] += i[j]
print(result)
# defaultdict(<class 'int'>, {1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2})
>>> print(result[1])
9
我假設你有這樣的解釋:
d = {'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}}
現在我們來寫這將需要一個參數(整數),總結所有值在所有內部字典這個整數的函數。
def calc(b):
result = 0
for val in d.values():
if b in val:
result += val[b]
如果你需要的是總的,那麼你可以sum
了所有使用值:
>>> b = 2
>>> sum(a.get(b, 0) for a in d.values())
6
如果你想把所有的b
s然後使用collections.Counter()
其行爲類似於dict
做所有的繁重:
>>> from collections import Counter
>>> sum((Counter(a) for a in d.values()), Counter())
Counter({1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2})
但是,如果你真的很挑剔並希望dict
:
>>> dict(sum((Counter(a) for a in d.values()), Counter()))
{1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2}
答案應該是一本字典。 –
您也可以使用['collections.Counter'](https://docs.python.org/2/library /collections.html#collections.Counter),默認情況下已從零開始提供數字值。 –