gpt4 book ai didi

字典列表的 Python 集合计数器

转载 作者:太空狗 更新时间:2023-10-30 00:44:32 24 4
gpt4 key购买 nike

我有一个动态增长的数组列表,我想将类似的值加在一起。这是一个例子:

{"something" : [{"one":"200"}, {"three":"400"}, {"one":"100"}, {"two":"800"} ... ]}

我希望能够将列表中的字典加在一起。因此,在这种情况下,对于键“something”,结果将是:

["one":400, "three": 400, "two": 800]

或类似的东西。我熟悉 Python 的收集计数器,但由于“something”列表包含字典,它不会工作(除非我遗漏了什么)。字典也是动态创建的,所以没有字典我无法构建列表。例如:

Counter({'b':3, 'c':4, 'd':5, 'b':2})

通常会起作用,但一旦我尝试添加一个元素,之前的值就会被覆盖。我注意到其他问题,例如:

Is there any pythonic way to combine two dicts (adding values for keys that appear in both)?

Python count of items in a dictionary of lists

但同样,列表中的对象是字典。

最佳答案

我认为这可以满足您的要求,但我不确定,因为我不知道“字典也是动态创建的,所以没有字典我无法构建列表”是什么意思。仍然:

input = {
"something" : [{"one":"200"}, {"three":"400"}, {"one":"100"}, {"two":"800"}],
"foo" : [{"a" : 100, "b" : 200}, {"a" : 300, "b": 400}],
}

def counterize(x):
return Counter({k : int(v) for k, v in x.iteritems()})

counts = {
k : sum((counterize(x) for x in v), Counter())
for k, v in input.iteritems()
}

结果:

{
'foo': Counter({'b': 600, 'a': 400}),
'something': Counter({'two': 800, 'three': 400, 'one': 300})
}

我预计将 sumCounter 一起使用是低效的(就像将 sum 与字符串一起使用一样低效以至于 Guido 禁止了它) ,但我可能是错的。无论如何,如果您遇到性能问题,您可以编写一个函数来创建一个 Counter 并在其上重复调用 +=update:

def makeints(x):
return {k : int(v) for k, v in x.iteritems()}

def total(seq):
result = Counter()
for s in seq:
result.update(s)
return result

counts = {k : total(makeints(x) for x in v) for k, v in input.iteritems()}

关于字典列表的 Python 集合计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28401904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com