Python-返回具有唯一键:值对的字典列表

Python-返回具有唯一键:值对的字典列表,python,list,python-3.x,dictionary,unique,Python,List,Python 3.x,Dictionary,Unique,我有一长串字典,大部分都没有重叠。但是,有些词典有相同的“Name”字段,我只希望在词典列表中有唯一的名称。我希望第一次出现的名字是留下来的,之后的任何名字都从列表中删除 我在下面列出了一个简短的列表来说明这个场景: myList = [ {'Name':'John', 'Age':'50', 'Height':'70'}, {'Name':'Kathy', 'Age':'43', 'Height':'65'}, {'Name':'John','Age':'46','He

我有一长串字典,大部分都没有重叠。但是,有些词典有相同的“Name”字段,我只希望在词典列表中有唯一的名称。我希望第一次出现的名字是留下来的,之后的任何名字都从列表中删除

我在下面列出了一个简短的列表来说明这个场景:

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'}
]
我希望此列表返回第一个“约翰”和凯西,但不返回第二个或第三个约翰及其相关信息


一个可接受但不是最佳的解决方案是,词典之间不能相邻使用相同的名称。

您可以浏览列表,并保留一组唯一的名称。每次遇到新名称(即不在集合中的名称)时,将其添加到集合中,并将相应的dict添加到结果中:

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
初步名单:

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'}
]
合乎逻辑(可能对新手更友好)的方式:

单程:

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'}]

注意:一行代码将包含每个名称的第一次出现,但它将返回任意顺序的列表。

您可以轻松为此编写for循环

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

你有没有尝试过自己解决这个问题?如果您向我们展示您的尝试,而不仅仅是通过示例输入提供问题范围,您通常会在StackOverflow获得更好的响应/接收。
set
s不能保证元素是有序的。这使得答案不相关,因为OP希望名称第一次出现。@u8y7541再次读取答案-该集合仅用于跟踪唯一性。顺序来自于对输入列表的迭代,结果列表保持相同的顺序。如果不是名称中的d['Name']:那正是我要找的。我以前从未用过
 def getName(name):
    '''Gets first occurence of name in list of dicts.'''
    for i in myList:
        if i['Name'] == name:
            return i