Python - 返回具有唯一键的字典列表:值对
问题描述:
我有一个很长的字典列表,大部分字典不重叠。但是,一些字典具有相同的“名称”字段,我只喜欢字典列表中的唯一名称。我希望名称的第一次出现是停留的,并且之后从列表中删除。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'}
]
我想这个列表返回第一“约翰”和凯西,但不是第二或第三约翰及他们的相关信息。
一个可以接受的,但并非最佳的解决方案也不会有相同名称的字典彼此相邻。
答
您可以在列表中运行并保留唯一名称的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
答
初步名单:
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'}]
注意:单线程将包含每个名称的第一个匹配项,但它将返回一个任意排序的列表。
答
您可以轻松地为此写一个for-loop。
def getName(name):
'''Gets first occurence of name in list of dicts.'''
for i in myList:
if i['Name'] == name:
return i
你有没有试图自行解决这个问题?如果您向我们展示您的尝试,您通常会在StackOverflow中获得更好的响应/接收,而不仅仅是通过示例输入提供问题范围。 –