在`list`中向`dict`添加缺失键

时间:2018-04-22 01:30:49

标签: python python-3.x dictionary

所以,我需要用matplotlib绘制一些东西,所有这些都是完美的,直到这个错误。基本上,我需要的是转变如下:

[
  {
    "foo":1,
    "bar":2
  },
  {
    "foo":8,
    "baz":3
  }
]

这样的事情:

[
  {
    "foo":1,
    "bar":2,
    "baz":0
  },
  {
    "foo":8,
    "baz":3,
    "bar":0
  }
]

有什么办法可以做到吗?

3 个答案:

答案 0 :(得分:1)

一种方法是计算密钥的并集,然后通过for循环进行迭代。

keys = set().union(*lst)

for d in lst:
    for k in keys - d.keys():
        d[k] = 0

print(lst)

[{'foo': 1, 'bar': 2, 'baz': 0},
 {'foo': 8, 'baz': 3, 'bar': 0}]

答案 1 :(得分:0)

如果keys是键列表,L是字典列表,那么:

for d in L:
    for k in keys:
        d.setdefault(k, 0)

将每个缺失的密钥设置为0

答案 2 :(得分:0)

由于我们发布了答案......这是一种更简单的方法。只需将您的dicts转换为defaultdict s,无论您在哪里定义它们。 - defaultdict(int, your_dictionary)

然后,无论不存在哪个键,您都可以访问此dict,因为如果它们不存在,则defaultdict将在此处返回0,如您所愿。没有必要在这里重新发明轮子。