Python 在键匹配的位置添加字典值

Python 在键匹配的位置添加字典值,python,list,dictionary,Python,List,Dictionary,我有一个字典列表,如下所示: a=[{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}] 我需要在列表中循环并添加键匹配的值。结果应该如下所示: a=[{'a':-1},{'b':6},{'c':3}] 非常感谢您的帮助。您可以使用集合。计数器: 这导致: Counter({'b': 6, 'a': 5, 'c': 3}) 但是,要使用负计数,必须使用循环: c = Counter() a=[{'a':1},{'b':2},{'c':3},{'a':-2},{

我有一个字典列表,如下所示:

a=[{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
我需要在列表中循环并添加键匹配的值。结果应该如下所示:

a=[{'a':-1},{'b':6},{'c':3}]
非常感谢您的帮助。

您可以使用集合。计数器:

这导致:

Counter({'b': 6, 'a': 5, 'c': 3})
但是,要使用负计数,必须使用循环:

c = Counter()
a=[{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
for x in a:
    c.update(x)
导致:

Counter({'b': 6, 'c': 3, 'a': -1})
这些方法使用了multiset/bag的反仿效,我认为这是一种比单元素dict列表更有用的数据结构,但如果您真的想

[{k:v} for k,v in result.items()]
可能是排序结果。如果订单很重要或有什么…

您可以使用集合。计数器:

这导致:

Counter({'b': 6, 'a': 5, 'c': 3})
但是,要使用负计数,必须使用循环:

c = Counter()
a=[{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
for x in a:
    c.update(x)
导致:

Counter({'b': 6, 'c': 3, 'a': -1})
这些方法使用了multiset/bag的反仿效,我认为这是一种比单元素dict列表更有用的数据结构,但如果您真的想

[{k:v} for k,v in result.items()]

可能是排序结果。如果排序很重要或是其他什么…

我可以通过以下方式实现它

a = [{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
b = {}

for x in a:
    k,v = x.popitem()

    # Check if the key is already in our output dict
    if k in b.keys():
        b[k] += v

    # If not, create it
    else:
        b[k] = v
哪个输出

b = {'a': -1, 'b': 6, 'c': 3}

我可以用这样的方法来实现它

a = [{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
b = {}

for x in a:
    k,v = x.popitem()

    # Check if the key is already in our output dict
    if k in b.keys():
        b[k] += v

    # If not, create it
    else:
        b[k] = v
哪个输出

b = {'a': -1, 'b': 6, 'c': 3}
IIUC:

应该给出您想要的输出:

>>> a = [{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
>>> dicts_combine(a)
[{'a': -1}, {'b': 6}, {'c': 3}]
您可以根据需要删除已排序的文件。

IIUC:

应该给出您想要的输出:

>>> a = [{'a':1},{'b':2},{'c':3},{'a':-2},{'b':4}]
>>> dicts_combine(a)
[{'a': -1}, {'b': 6}, {'c': 3}]

您可以根据需要删除已排序的计数器。

dictsumCounterx for x for x in a,Counter将其返回到DictSum。如果值为负值,则此操作不起作用。我意识到我没有指定,但它必须处理负值。问题已更新,以反映负值的要求。这很有趣,我可以看到它会因负值而中断,但我看不出有什么好的理由。@wim想象你有一袋10颗弹珠,有人说“拿出100颗”不喜欢这个类比。。有人刚刚递给我一袋-100颗弹珠,我所做的就是把它和我那袋10颗弹珠混在一起。我想要么说我现在有一袋-90颗弹珠,要么让宇宙爆炸。相反,两个袋子都神秘地消失了。dictsumCounterx代表a中的x,计数器将其恢复到dictsumCounterx。在值为负值的情况下,这不起作用。我意识到我没有指定,但它必须处理负值。问题已更新,以反映负值的要求。这很有趣,我可以看到它会因负值而中断,但我看不出有什么好的理由。@wim想象你有一袋10颗弹珠,有人说“拿出100颗”不喜欢这个类比。。有人刚刚递给我一袋-100颗弹珠,我所做的就是把它和我那袋10颗弹珠混在一起。我想要么说我现在有一袋-90颗弹珠,要么让宇宙爆炸。相反,两个袋子都神秘地消失了..a=[{'a':1},{'b':2},{'a':3,'b':4,'c':5}]的预期输出..a=[{'a':1},{'b':2},{'a':3,'b':4,'c':5}]的预期输出..注意:这一变化也会删除问题中的原始内容--他的输入和输出指令标记相同,所以我假设输入是非结果性的。这个问题很容易通过克隆输入字典来解决。我使用了这个答案的一个修改版本。注意:这一变化也会删除问题中的原始内容。他的输入和输出字典的标签是相同的,所以我假设输入是非结果性的。这个问题很容易通过克隆输入dict来解决。dict使用了这个答案的一个修改版本。