2017-09-22 6 views
0

j'ai un long dictionnaire avec cette structure:dictionnaire Trier de tuples et prenez la première python d'entrée

{'key': (integer1, 'string1')} 

et je veux trier le dictionnaire par integer1 & prendre la première entrée.

Voici ce que j'ai jusqu'à présent:

sorted_by_integer = OrderedDict(sorted(tuple_dict.items(),key=lambda x:x[0], reverse=True)) 
keys = list(sorted_by_integer) 
value = sorted_by_integer[keys[0]] 
first_entry = {} 
first_entry[keys[0]] = value 

Ma question est ... je peux condenser

first_entry = {} 
first_entry[keys[0]] = value 

dans un one-liner?

+0

Essayez 'next (iter (sorted_by_integer.items()))'. Cette sortie est-elle suffisante? – pylang

Répondre

1

En utilisant une expression d'une ligne, vous pouvez récupérer les clés du dictionnaire dans l'ordre de tri en utilisant l'entier de la valeur comme la clé de tri:

s = {'key': (integer1, 'string1')} 
new_data = [a for (a, (b, c)) in sorted(s.items(), key=lambda x: x[-1][0])] 
+0

Lorsque j'essaie cela, je ne récupère les clés que dans une liste. Est-ce que je manque quelque chose? – e1v1s

+0

@ e1v1s Oui, cela ne vous donnera que les clés triées. Si ce n'est pas ce que vous cherchez, pourriez-vous préciser exactement? – Ajax1234

0
from collections import OrderedDict 
s = {'key': (4, 'string1'), 'key2':(2, 's2'), 'key3':(3, 's3')} 
s = dict(sorted(s.items(), key=lambda x: x[-1][0])[:1]) 
print s 

sortie:
{ » key2 ': (2,' s2 ')}

+0

Est-ce ce que vous voulez? @ e1v1s – QuantumEnergy