在列表中附加不同的字典值

时间:2015-06-16 15:14:34

标签: python mongodb dictionary

我在mongodb数据库中存储字典列表。

我每小时都会获得带有新词典值的列表,但某些词典可能与之前插入的相同。

所以我想在列表中只插入不同的词典,并在mongo中更新该列表。

插入1

res = [{"a": 1},{"b": 2},{"c": 4},{"d": 5},{"e": 6}]

插入2

res = [{"f": 7},{"b": 2},{"c": 4},{"g": 8},{"h": 9}]

在第二次插入期间,我将抓取res并添加新的res。但是在追加时,我想在列表中处理不同的字典。

除了逐一检查列表中的所有值之外,还有任何python函数可以解决这个问题吗?

或者以任何方式让mongodb自己处理这件事。

3 个答案:

答案 0 :(得分:2)

作为此任务的python配方,您可以使用set作为字典项的容器(即元组)来保留唯一元素,然后再次转换为dict:

res1 = [{"a": 1},{"b": 2},{"c": 4},{"d": 5},{"e": 6}]
res2 = [{"f": 7},{"b": 2},{"c": 4},{"g": 8},{"h": 9}]

>>> [{i:j} for i,j in {next(i.iteritems()) for i in res1+res2}]
[{'a': 1}, {'b': 2}, {'e': 6}, {'f': 7}, {'h': 9}, {'c': 4}, {'g': 8}, {'d': 5}]

答案 1 :(得分:1)

upsert应该做你想要的事情:

for key in res.keys():
    db.collection.update(
       {username:key},
       {$set:{'value':res[key]}},
       {upsert: true}
)

或者,使用sets在python中执行。

答案 2 :(得分:1)

我相信您正在寻找MongoDB中的$ addToSet运算符:

http://docs.mongodb.org/manual/reference/operator/update/addToSet