2015-02-27 3 views
2

У меня есть списокПолучение уникального значения в Python

[<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 46L, 'PatientProfile_ID': 2L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 46L, 'PatientProfile_ID': 2L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 46L, 'PatientProfile_ID': 2L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 46L, 'PatientProfile_ID': 2L}>, 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>] 

Я хочу отчетливого значение этого ожидаемого результата

[ 
<Storage {'CaseID': 45L, 'PatientProfile_ID': 3L}>, 
<Storage {'CaseID': 46L, 'PatientProfile_ID': 2L}> 
] 

Этих данные тянут из базы данных. Пожалуйста, не советуйте мне использовать ключевое слово DISTINCT в базе данных. Его отсортировали по другой колонке. Использование отдельных элементов удалит отсортированный результат.

Это можно сделать в python. Или мне нужно написать цикл for, чтобы сделать то же самое?

MyCODE

entries=db.query("SELECT cases.ID as CaseID,PatientProfile_ID FROM \ 
          `callog` ,consultation,cases WHERE callog.Consultation_ID=consultation.ID and consultation.Case_ID = cases.ID and \ 
          Doctor_ID="+str(Id)+" ORDER BY callog.CallDate DESC") 
      rows=entries.list() 
      return rows 
+0

'набор (ur_list)' операция будет работать. –

+0

@TanveerAlam Это не гарантирует порядок позиций – thefourtheye

+0

Что такое 'Хранение'? – thefourtheye

ответ

1

Это должно обрабатывать вещи красиво.

def remove_dupes_keep_order(seq): 
    seen = set() 
    seen_add = seen.add 
    return [ x for x in seq if not (x in seen or seen_add(x))] 

Использование seen_add ускоряет работу.

См. Также, this SO question.

Поскольку этот вопрос, кажется, что ваши элементы типа Storage, попробуйте следующее:

def remove_dupes_keep_order(seq): 
    seen = set() 
    seen_add = seen.add 
    return [ x for x in seq if not (json.dumps(x, sort_keys=True) in seen or seen_add(json.dumps(x, sort_keys=True)))] 
+0

Нет, <тип 'exceptions.TypeError'> at/doctor unhashable type: 'Storage' –

+0

А, ну, это дерьмово. Используете ли вы объекты 'Storage'? Или вы можете преобразовать его в стандартный словарь Python? – Richard

+0

@AbhilashCherukat, я обновил свой ответ, чтобы предоставить альтернативную возможность. – Richard

0

Попробуйте это:

newList = list(set(oldList)) 

выше, превращает ваш список в набор (который удаляет дубликаты), а затем обратно в список.

Для получения дополнительной информации: См. this. Смотрите, если это помогает.

+0

Нет, исключение at/doctor Тип устройства хранения: «Хранение» Хранение - проблема в обоих ответах. –

0

После всех проб и ошибок, я обратно Циклы

def remove_dupes_keep_order(self,seq): 
     Lister=[] 
     for row in seq: 
      Dicter={"CaseID":row["CaseID"],"PatientProfile_ID":row["PatientProfile_ID"]} 
      Lister.append(Dicter) 
     seen = [] 
     seen_add = seen.append 
     return [ x for x in Lister if not (x in seen or seen_add(x))] 

Отрывок Предоставлено: @Richard

+0

У этого есть цикл for, вы можете использовать принятый ответ coz лучшего решения. –

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