2016-05-20 10 views
2

Ich habe eine Reihe von Daten, und ich möchte überprüfen, ob die value in meinem data Duplikate sind.
Meine Methode ist unten, und ich denke, es ist ein bisschen kompliziert, also möchte ich fragen, gibt es einen besseren Weg, dies zu tun?Python überprüfen, ob Wörterbücher Wert eines Schlüssel-Duplikats in Liste

data =[ 
     {"name": "ali", 
     "value": "ABC" 
     }, 
     {"name": "bob", 
     "value": "ABC" 
     }, 
     {"name": "cathy", 
     "value": "ABC" 
     }, 
     {"name": "david", 
     "value": "ABCD" 
     }, 
    ] 


check_list = [] 
duplicate_value = [] 
for d in data: 
    if d["value"] not in check_list: 
     check_list.append(d["value"]) 
    else: 
     if d["value"] not in duplicate_value: 
      duplicate_value.append(d["value"]) 


print "You have duplicate value:", duplicate_value 
+0

Warum Sie nicht verwenden eine 'Menge' von' (Schlüssel, Wert) 'Einträgen? –

+0

Er scheint nur an Duplikaten in Werten interessiert zu sein. 'set ([('ali', 'ABC'), ('bob', 'ABC')]) hilft hier nicht wirklich viel –

Antwort

3
from collections import Counter 

data =[ 
     {"name": "ali", 
     "value": "ABC" 
     }, 
     {"name": "bob", 
     "value": "ABC" 
     }, 
     {"name": "cathy", 
     "value": "ABC" 
     }, 
     {"name": "david", 
     "value": "ABCD" 
     }, 
    ] 

arr = [d['value'] for d in data] 

duplicate_values = [k for k, v in Counter(arr).items() if v > 1] 

print('Duplicate values - ', duplicate_values) 

Ausgang -

Duplicate values - ['ABC'] 
0

könnten Sie collections.Counter verwenden:

>>> c = collections.Counter(d['value'] for d in data) 
>>> c 
Counter({'ABC': 3, 'ABCD': 1}) 
>>> duplicates = [k for k, n in c.most_common() if n > 1] 
>>> duplicates 
['ABC'] 
1

Sie etwas tun könnte einfach wie:

def has_duplicates(your_list): 
    values = [item['value'] for item in your_list] 

    return len(set(values)) < len(values) 

def get_duplicates(your_list): 
    values = [item['value'] for item in some_list] 

    return [item for item in set(values) if values.count(item) > 1] 
Verwandte Themen