我有一个list
的{{1}},像这样:
dicts
我想要一个类似的东西
x = [{'a': 3}, {'b': 1}, {None: 0}, {'a': 1}, {'b': 1}, {None: 0}]
达到此目的最友好的内存方式是什么?
答案 0 :(得分:2)
您还可以使用collections.Counter
,它自然会更新计数:
from collections import Counter
l = [{'a': 3}, {'b': 1}, {None: 0}, {'a': 1}, {'b': 1}, {None: 0}]
counts = Counter()
for d in l:
counts.update(d)
print([{k: v} for k, v in counts.items()])
来自collections.Counter.update
的文档:
元素是从另一个映射(或计数器)的可迭代次数或添加的次数中计数的。类似于
dict.update()
,但添加计数而不是替换计数。另外,可迭代对象应该是元素序列,而不是(键,值)对序列。
您也可以使用collections.defaultdict
进行计数:
from collections import defaultdict
l = [{'a': 3}, {'b': 1}, {None: 0}, {'a': 1}, {'b': 1}, {None: 0}]
counts = defaultdict(int)
for d in l:
for k, v in d.items():
counts[k] += v
print([{k: v} for k, v in counts.items()])
或者您也可以自己初始化0
:
l = [{'a': 3}, {'b': 1}, {None: 0}, {'a': 1}, {'b': 1}, {None: 0}]
counts = {}
for d in l:
for k, v in d.items():
counts[k] = counts.get(k, 0) + 1
print([{k: v} for k, v in counts.items()])
来自dict.get
的文档:
如果key在字典中,则返回key的值,否则返回默认值。如果未指定default,则默认为None,因此此方法永远不会引发KeyError。
输出:
[{'a': 4}, {'b': 2}, {None: 0}]
答案 1 :(得分:1)
让我们说:
l = [{'a': 3}, {'b': 1}, {None: 0}, {'a': 1}, {'b': 1}, {None: 0}]
现在,我们将提取并累加:
res = []
for k in l:
for i in k:
s = {i:sum(j[i] for j in l if i in j)}
if s not in res:
res.append(s)
给予:
[{'a': 4}, {'b': 2}, {None: 0}]
或者我们可以使用(改编自here):
result = {}
for d in l:
for k in d.keys():
result[k] = result.get(k, 0) + d[k]
res = [{i:result[i]} for i in result]
答案 2 :(得分:0)
使用熊猫检查单行代码。
version: '2'
services:
demowebapp:
image: demoapp:latest
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://localhost
- MONGO_URL=mongodb://35.168.21.133/demodb
ports:
- 3000:3000