2016-03-28 6 views
1

私はそうのような辞書のリストを持っている:ディクショナリのリストと一致させる最も効率的な方法は何ですか?

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']): 

答えて

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')] 
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')] 
+1

ニースのアプローチを、だけリスト内の辞書が適切にソートされていると仮定して* groupbyが正しく動作するために。 – alecxe

+0

@alexce:良い点。 Austin Hastingのソリューションが優れています。 – Amadan

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 ] 
     ) 
+0

とても助かりました! –

関連する問題