2013-03-08 4 views
-1

У меня есть список dicts и хотелось бы иметь только уникальные значения на основе определенных ключей.Список словарей, которые должны быть отфильтрованы по определенным значениям

Допустим, у меня есть

data = [{name: "John", age: "20", occupation: "Python pro"}, \ 
     {name: "Jack", age: "80", occupation: "Olympic Athlete"}, \ 
     {name: "John", age: "20", occupation: "Student"}] 

Я хотел бы, чтобы уменьшить его на основании ключей «имя» и «возраст», чтобы иметь это выглядеть

[{name: "John", age: "20", occupation: "Python pro"}, \ 
{name: "Jack", age: "80", occupation: "Olympic Athlete"}] 

Я попытался следующие, но Бесполезный «Я осознаю вопиющую проблему, в которой она будет каждый раз добавлять все.

all_drives = drivesInBuilder("object") + drivesInBuilder("account") + drivesInBuilder("container") 
    reduced_list = [(x["ip address"], x["name"]) for x in all_drives] 
    unique_list = list(set(reduced_list)) 
    unique_drives = [x for x in all_drives if (x["ip address"], x["name"]) in unique_list] 
    print(unique_drives) 
+2

Почему ваш первый пример совершенно не связан с вашим вторым примером? Очень сложно сказать, какова ваша фактическая проблема/вопрос. Вы не понимаете, почему ваш код не фильтруется правильно? Или вы хотите изменить его для фильтрации по некоторым критериям? Измените свой вопрос, чтобы сделать это более ясным. – Wilduck

+0

@Wilduck Первый пример - упрощенная версия моей реальной проблемы. Вторая часть - это всего лишь пример того, что я пробовал в своей реальной проблеме ... главным образом потому, что люди спрашивают «что вы пробовали?». – OrhanC1

+0

уверен, очевидно. Но вы не объяснили, как они соотносятся друг с другом или, что самое главное, с вашим вопросом. – Wilduck

ответ

5
data = [{"name": "John", "age": "20", "occupation": "Python pro"}, \ 
     {"name": "Jack", "age": "80", "occupation": "Olympic Athlete"}, \ 
     {"name": "John", "age": "20", "occupation": "Student"}] 

new_data = [] 
names_ages = set([]) 
for d in data: 
    name_age = (d["name"], d["age"]) 
    if name_age not in names_ages: 
     new_data.append(d) 
    names_ages.add(name_age) 

print new_data 
# [{'age': '20', 'name': 'John', 'occupation': 'Python pro'}, 
# {'age': '80', 'name': 'Jack', 'occupation': 'Olympic Athlete'}] 
+1

избили меня, отправил то же :) +1 – khachik

+1

Ударьте меня тоже. Другой вариант - удалить запись, а не создавать вспомогательный список. – Jared

+0

Спасибо большое :) – OrhanC1

Смежные вопросы