2016-01-30 2 views
0

Иметь list из dict объектов, где 50% будет иметь ключевой name и 50% будет иметь ключевые full_name, и я хотел бы она сортируется в алфавитном порядке на основе либо ключ.питон: список dicts сортировки по одному ключу или другой

Какая-то функция, как:

if 'name' in a: 
    a_name = a['name'] 
elif 'full_name' in a: 
    a_name = a['full_name'] 
# repeat with a b in the compare, sort based on value 

Есть ли более эффективный способ здесь?

+2

Это не дубликат этого. У этого есть дополнительное усложнение, которое нужно выбрать один из двух ключей. –

+1

@Padraic Cunningham, ИМХО, это не дубликат. Вы упомянули вопрос о нескольких ключах, но этот вопрос отличается. –

ответ

1

Я думаю, что это должно работать:

sorts = sorted(data, key= lambda x: x.get('name') or x.get('full_name')) 
+0

Могу ли я узнать причину downvoting? Я думаю, это работает. –

+0

Да, это хороший подход, я думаю, до тех пор, пока в данных нет никаких пустых строк. Возможно, немного быстрее, чем мой ответ. –

0

сцепить обе строки, заменяя пустую строку для отсутствующего один:

lst.sort(key=lambda d: d.get('name', '') + d.get('full_name', '')) 
-1

Вы пробовали лямбда на основе функционального подхода:

testList = sorted(testList, key=lambda name: a_name['name'] if 'name' in a_name else a_name['full_name']) 
Смежные вопросы