匹配词典列表的最有效方法是什么?

时间:2016-03-28 01:46:45

标签: python list dictionary

我有一个像这样的词典列表:

lst = [{'City or Community': 'Augusta', 'State':'GA', 'Parent Company': 'WoW!'},
      {'City or Community': 'Augusta', 'State':'GA', 'Parent Company': 'Comcast'}]

迭代列表以查找城市/州组合的结果超过1的实例的最有效方法是什么?

这就是我现在正在做的事情:

def search(complete):
    #searching through the full list for footprints which overlap by city, county, state, etc
    trial = []
    for y in complete:
        for x in complete:
            for subdicts in y:
                for otherdicts in x:
                    if otherdicts['Parent Company'] != subdicts['Parent Company'] and (otherdicts['City or Community'], otherdicts['State']) == (subdicts['City or Community'], subdicts['State']):

3 个答案:

答案 0 :(得分:1)

尝试collections.Counter()

import collections

lst = [{'City or Community': 'Augusta', 'State':'GA', 'Parent Company': 'WoW!'},
  {'City or Community': 'Augusta', 'State':'GA', 'Parent Company': 'Comcast'}]

cntr = collections.Counter(
          [ (d['City or Community'], d['State']) for d in lst ]
       )

答案 1 :(得分:0)

这是一种使用defaultdict的方法:

from collections import defaultdict

combined = defaultdict(list)
lst = [{'City or Community': 'Augusta', 'State':'GA', 'Parent Company': 'WoW!'},
       {'City or Community': 'Augusta', 'State':'GA', 'Parent Company': 'Comcast'},]

# Loop through your list of dictionaries and
# create a combined dictionary where keys are cities and states, and values are lists of companies
for d in lst:
    combined[(d['City or Community'], d['State'])].append(d['Parent Company'])

# For each of the keys in the combined dictionary, only print them out
# if there are more than one companies for that key
print(list(cityAndState for (cityAndState, companies) in combined.items() if len(companies) > 1))
>>> [('Augusta', 'GA')]

答案 2 :(得分:0)

[x for x, y in itertools.groupby(lst, lambda x: (x['City or Community'], x['State'])) if sum(1 for z in y) > 1]
# => [('Augusta', 'GA')]