我有词典列表:
a1 = [{'x1': 1, 'x2': 2, 'x3': 3}]
a2 = [{'x1': 2, 'x2': 3, 'x3': 4}]
我需要将两个列表组合成第三个列表,如:
a3 = [{'x1': 3, 'x2': 5, 'x3': 7}]
我用Google搜索并发现较新版本的Python具有collection.Counter
s的概念,但我正在处理Python 2.6.4
并且不支持collections.Counters
。
答案 0 :(得分:4)
您可以对Python dicts使用字典理解:
a1 = {'x1':1, 'x2':2, 'x3':3}
a2 = {'x1':2, 'x2':3, 'x3':4}
a3 = {
key: a1.get(key, 0) + a2.get(key, 0)
for key in set(a1.keys() + a2.keys())
}
答案 1 :(得分:2)
我认为a1, a2
是字典(即a1 = {x1:1,x2:2,x3:3}
而不是方括号)。
假设他们有共同的密钥,你可以通过字典理解来实现
{key: a1[key]+a2[key] for key in a1}
答案 2 :(得分:0)
你可以试试这个:
a1 = [{'x1': 1, 'x2': 2, 'x3': 3}]
a2 = [{'x1': 2, 'x2': 3, 'x3': 4}]
final_list = [{a:a1[0][a]+b for a, b in a2[0].items()}]
输出:
[{'x2': 5, 'x3': 7, 'x1': 3}]
答案 3 :(得分:0)
您可以找到添加到Python 2.7的collections.Counter
recepie。
这可以导入Python 2.5+,因此您可以使用它。
然后它很简单:
a1 = {1:1,2:2,3:3}
a2 = {1:2,2:3,3:4}
from collections import Counter
c1 = Counter(a1)
c2 = Counter(a2)
c1.update(c2)
c1
Counter({3: 7, 2: 5, 1: 3})
答案 4 :(得分:0)
您编写的代码(和描述)在Python中没有意义。你正在混合列表和词典!
如果您使用大括号[
和]
替换示例中的方括号{
和}
,那么您将使用词典。
列表没有密钥。字典。
以下是如何以您希望的方式组合两个词典
# Alternative way of making two dicts
a = dict(a=1,b=2,d=3)
b = dict(a=4,b=5,c=6)
# make a set of all the keys
keys = set.union(set(a), set(b))
# Create a new dictionary combining the data in the first two
ab = { k : a.get(k,0) + b.get(k,0) for k in keys}
print(ab)
此代码的输出是
{'c': 6, 'd': 3, 'a': 5, 'b': 7}
此代码不假设两个词典具有相同的键集,因此我们首先创建一组可在词典中找到的所有键。
然后我们使用一个名为字典理解的构造,这只是一种从你在别处存储的数据构建字典的简写语法。
在dict理解中,我们遍历我们之前找到的所有键,并在原始dicts中查找相应的值并将它们加在一起,然后将它们存储在相同键下的新dict中。
我们必须使用d.get(key, 0)
而不是d[key]
,因为后者会为第一个密钥引发KeyError
异常,该异常只存在于其中一个原始代码中。 get
的第二个参数是在密钥不存在时应该返回的值。