How to find common keys in a list of dicts and sort them by value?

dictionary, list, python, sorting

Solution

Here's how I'd do it:

my_dict = [{2:1, 3:1, 5:2}, {3:4, 6:4, 2:3}, {2:5, 3:6}]

# Finds the common keys
common_keys = set.intersection(*map(set, my_dict))

# Makes a new dict with only those keys and sums the values into another dict
summed_dict = {key: sum(d[key] for d in my_dict) for key in common_keys}

Or as a crazy one-liner:

{k: sum(d[k] for d in my_dict) for k in reduce(set.intersection, map(set, my_dict))}

Problem

I want to create a finalDic which contains common keys and sum of their values ``` myDic = [{2:1, 3:1, 5:2}, {3:4, 6:4, 2:3}, {2:5, 3:6}, ...] ``` First find common keys ``` commonkey = [{2:1, 3:1}, {2:3, 3:4}, {2:5, 3:6}] ``` Then Sum and sort by their values ``` finalDic= {3:11, 2,9} ``` I've tried this and not even close what i want ``` import collections myDic = [{2:1, 3:1, 5:2}, {3:4, 6:4, 2:3}, {2:5, 3:6}] def commonKey(x): i=0 allKeys = [] while i<len(x): for key in x[0].keys(): allKeys.append(key) i=i+1 commonKeys = collections.Counter(allKeys) commonKeys = [i for i in commonKeys if commonKeys[i]>len(x)-1] return commonKeys print commonKey(myDic) ``` Thanks

Original source