2016-10-21 7 views
0

私はPythonでオブジェクトの配列を持っています。どのように私はループ配列を通って、ここでPythonの重複配列項目の属性を設定しました

valid=False 

として重複する名前を持つすべてのオブジェクトを設定することができますことは、私のテストコードは次のとおりです。

class Asset(object): 
    def __init__(self, name=""): 
     self.name = name 
     self.valid = True 

items = [ 
    Asset("doug"), 
    Asset("kevin"), 
    Asset("kim"), 
    Asset("kevin") 
] 

for x in items: 
    print vars(x) 

だから、現実には、このテストの結果は次のようになります。

> {'name': 'doug', 'valid': True} 
> {'name': 'kevin', 'valid': False} 
> {'name': 'kim', 'valid': True} 
> {'name': 'kevin', 'valid': False} 

答えて

0

ハッシュマップ/ディクショナリを使用すると適切な場合があります。

class Asset(object): 
    def __init__(self, name=""): 
     self.name = name 
     self.valid = True 

items = [ 
    Asset("doug"), 
    Asset("kevin"), 
    Asset("kim"), 
    Asset("kevin") 
] 

frequency_of_names = {} 

for item in items: 
    name = item.name 
    if name in frequency_of_names.keys(): 
     frequency_of_names[name] = frequency_of_names[name] + 1 
    else: 
     frequency_of_names[name] = 1 

for item in items: 
    if frequency_of_names[item.name] > 1: 
     item.valid = False 

for item in items: 
    print item.name, item.valid 

出力:リスト内包とカウント方法を使用して

doug True 
kevin False 
kim True 
kevin False 
0

names = [item.name for item in items] 
frequency = {name:names.count(name) for name in names} 
# Give us {doug: 1, kevin: 2, kim: 1} 

for item in items: 
    if frequency[item.name] > 1: 
     item.valid = False 

for item in items: 
    print item.name, item.valid 

    # The output is the same from above. 
関連する問題