我有一个嵌套字典,例如:
data = {
'level1a': {'level2a':[1,2,3]},
'level1b': {'level2b':[4,5,6]},
'level1c': {'level2a':[7,8,9]}
}
现在我想找到并总结具有相同 2 级关键字('level2a')的 2 个列表。结果应该是这样的:
[8, 10, 12]
有没有一些有效的方法来做到这一点?
我有一个嵌套字典,例如:
data = {
'level1a': {'level2a':[1,2,3]},
'level1b': {'level2b':[4,5,6]},
'level1c': {'level2a':[7,8,9]}
}
现在我想找到并总结具有相同 2 级关键字('level2a')的 2 个列表。结果应该是这样的:
[8, 10, 12]
有没有一些有效的方法来做到这一点?
像这样的东西:
from collections import Counter
from operator import add
data = {
'level1a': {'level2a':[1,2,3]},
'level1b': {'level2b':[4,5,6]},
'level1c': {'level2a':[7,8,9]}
}
c = Counter()
dic = {}
for k,v in data.iteritems():
for k1, v1 in v.iteritems():
c[k1] += 1
val = dic.setdefault(k1, [0]*len(v1))
dic[k1] = map(add, v1, val)
for k,v in c.iteritems():
if v > 1:
print dic[k]
输出:
[8, 10, 12]
尝试:
result=[]
for first_key, first_value in data.iteritems():
for second_key, second_value in first_value.iteritems():
if second_key == 'level2a':
if result == []:
result += second_value
else:
result=[result[i] + value for i,value in enumerate(second_value)]
这将遍历它们中的每一个,检查这些二级字典中的正确键。if/else 循环确定是否已将任何项目添加到结果中。如果是这样,它将根据“level2a”中的下一个列表增加值。这也假设所有二级列表的长度相同,否则您将拥有result
不会增加的尾随值。
你可以尝试这样的事情:
>>> data = {
... 'level1a': {'level2a':[1,2,3]},
... 'level1b': {'level2b':[4,5,6]},
... 'level1c': {'level2a':[7,8,9]}
... }
>>>
>>> def sum_matches(data, match):
... inner = data.itervalues()
... matches = (x[match] for x in inner if match in x)
... return [sum(x) for x in zip(*matches)]
...
>>>
>>> sum_matches(data, 'level2a')
[8, 10, 12]