2012-04-24 2 views
1

Необходимо выяснить топ 10-ключ словаря на основе значения .... значение кортежа из двух полеев ..топ -10 уникальных ключей словаря можно найти на основе стоимости

{ Key : (value1, value2) } 

Итак, сначала нам нужно найти список ключей на основе 10 лучших значений1, а затем мы должны найти список ключей на основе 10 лучших значений2.

И тогда мы должны найти множество list1 и list2 и возвращает список ...

Как мы можем сделать это вещий образом ...

Или я должен написать полный логика, чтобы сделать этот материал ...

Я написал одно решение: где словарь является ключевым: пара значения .....

dict(sorted(dict_mapping.iteritems(), key=lambda dict_mapping:dict_mapping[1]) [0:10]).keys() 

Пожалуйста, помогите ..

+0

попытаться использовать 1 или 2 параметра длины символа в лямбда, это сделает его более читаемым. – KurzedMetal

+1

Можете ли вы уточнить «И тогда нам нужно найти набор list1 и list2 и вернуть список ...»? –

ответ

1

Если значения словаря являются кортежами, сортировка() сортировки python будет выполнять лексикографическую сортировку. Это означает, что value1 будет использоваться для сортировки, а значение2 будет использоваться для развязывания.

sorted(a.keys(), key=a.get)[:10] 

Это должно привести к 10 ключевым ключам, которые сортируются по значениям вместо ключей в словаре.

+0

Привет, я нашел, что ваше решение стоит того ... Поскольку другие решения не дали мне правильных результатов. но возможно ли вернуть отсортированную последовательность только на значение 1 или только значение2 .... оба не должны использоваться ...... Я преобразовал сначала в список, а затем использовал отсортированную функцию. жестко .... но есть ли реализация с dict только ... не использовать память списка снова .... – geek

0
data = {'key1': ('value1', 'value2'), 'key2': ('value3', 'value4')} 

tmp = [sorted(data.keys(), key=lambda x: data[x][i])[:10] for i in (0, 1)] 
result = set(tmp[0]+tmp[1]) 
Смежные вопросы