Python - 返回具有唯一Key:Value对的字典列表

时间:2016-08-19 21:16:24

标签: python list python-3.x dictionary unique

我有很长的词典列表,大部分都没有重叠。但是,有些词典具有相同的名称'字段和我只喜欢字典列表中的唯一名称。我希望第一次出现的名称是保留名称,然后从列表中删除。

我在下面列出了一个简短的清单来说明情景:

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

我希望此列表能够返回第一个' John'和Kathy,但不是第二或第三个Johns及其相关信息。

一个可接受但不是最优的解决方案也是没有彼此相邻的字典。

3 个答案:

答案 0 :(得分:3)

您可以在列表上运行并保留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

答案 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

答案 2 :(得分: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'}]

注意:单行将包含每个名称的第一个匹配项,但它将返回一个任意排序的列表。