2016-08-19 12 views
1

私は大部分が重複しない辞書の長いリストを持っています。しかし、辞書の中には同じ「名前」フィールドがあり、辞書のリストにある一意の名前だけが好きです。私は、名前の最初の出現が、そのリストの中から削除されるものであることを望みます。Python - 一意のキーを持つ辞書のリストを返す:値のペア

私はシナリオを説明するために、以下の短いリストを入れている:

myList = [ 
    {'Name':'John', 'Age':'50', 'Height':'70'}, 
    {'Name':'Kathy', 'Age':'43', 'Height':'65'}, 
    {'Name':'John','Age':'46','Height':'68'}, 
    {'Name':'John','Age':'50','Height':'72'} 
] 

私は第二または第三ジョンズ最初「ジョンとキャシーを返すために、このリストは好きですが、ないと思いますし、関連情報

許容されるが最適ではない解決策は、同じ名前の辞書が互いに隣り合っていないことになります。

+4

あなた自身でこの問題を解決する試みはありますか?サンプルインプットで問題のスコープを提供するのではなく、一般的にStackOverflowでより良い応答/受信を得ることができます。 –

答えて

2

リストの上を実行して、一意の名前のsetを保持することができます。

def uniqueNames(dicts): 
    names = set() 
    result = [] 
    for d in dicts: 
     if not d['Name'] in names: 
      names.add(d['Name']) 
      result.append(d) 
    return result 
+0

'set'sは要素が順番にあることを保証しません。 OPは名前の最初の出現を望んでいるので、これは答えを無関係にします。 – u8y7541

+3

@ u8y7541答えをもう一度読んでください - セットは一意性を追跡するためにのみ使用されます。順序は入力リストを反復することによってもたらされ、結果リストは同じ順序を保持します。 – Mureinik

+0

d ['名前']の名前: これはまさに私が探していたものです。私はそれを一度も使ったことがない – sastrup

0

初期リスト:

my_list = [ 
    {'Name':'John', 'Age':'50', 'Height':'70'}, 
    {'Name':'Kathy', 'Age':'43', 'Height':'65'}, 
    {'Name':'John','Age':'46','Height':'68'}, 
    {'Name':'John','Age':'50','Height':'72'} 
] 
新しい名前に遭遇するたびに(つまり、セットに含まれない名前)、あなたは結果にセットし、それぞれの辞書に追加します

(潜在的に初心者フレンドリーに)論理的な方法:

names = set() 
new_list = [] 
for d in my_list: 
    name = d['Name'] 
    if name not in names: 
     new_list.append(d) 
     names.add(d['Name']) 
print new_list # [{'Age': '50', 'Name': 'John', 'Height': '70'}, {'Age': '43', 'Name': 'Kathy', 'Height': '65'}] 

ワンライナー方法:

new_list = {d['Name']: d for d in reversed(my_list)}.values() 
print new_list # [{'Age': '43', 'Name': 'Kathy', 'Height': '65'}, {'Age': '50', 'Name': 'John', 'Height': '70'}] 

:1ライナーには各名前の最初のオカレンスが含まれますが、任意の順序でリストが返されます。

1

forループを簡単に書くことができます。

def getName(name): 
    '''Gets first occurence of name in list of dicts.''' 
    for i in myList: 
     if i['Name'] == name: 
      return i 
関連する問題