Python返回的字典列表关键:价值派

2024-04-29 20:55:44 发布

您现在位置: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'}
]

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

一个可接受的,但不是最佳的解决方案,也就是不要将同名词典放在一起。在


Tags: name名称信息列表age字典场景解决方案
3条回答

初始列表:

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

合乎逻辑的(可能对新手更友好)方式:

^{pr2}$

一条直线:

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

您可以浏览列表并保留一个set的唯一名称。每次遇到一个新名称(即不在集合中的名称),将其添加到集合中,并将相应的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

相关问题 更多 >