Załóżmy, że mam dykt.sortowanie według wartości python
data = {1:'b', 2:'a'}
I chcę, aby posortować dane według 'b' i 'a' więc uzyskać wynik
'a','b'
Jak mam to zrobić?
Jakieś pomysły?
Załóżmy, że mam dykt.sortowanie według wartości python
data = {1:'b', 2:'a'}
I chcę, aby posortować dane według 'b' i 'a' więc uzyskać wynik
'a','b'
Jak mam to zrobić?
Jakieś pomysły?
Aby uzyskać wartości użyć
sorted(data.values())
Aby otrzymać klucze pasujące użyj key
funkcję
sorted(data, key=data.get)
Aby uzyskać listę krotek uszeregowane według wartości
sorted(data.items(), key=lambda x:x[1])
Powiązana : patrz dyskusja tutaj: Dictionaries are ordered in Python 3.6+
Uporządkuj wartości:
sorted(data.values())
powraca
['a','b']
Myślę też ważne jest, aby pamiętać, że Python dict
typ obiektu znajduje się tabela hash (more on this here), a zatem nie jest zdolny do bycia posortowane bez konwersji jego kluczy/wartości na listy. To, co to pozwala, to pobranie pozycji w stałym czasie O(1)
, bez względu na rozmiar/liczbę elementów w słowniku.
Mimo, że kiedyś uporządkować swoje klucze - sorted(data.keys())
lub wartości - sorted(data.values())
można następnie użyć tej listy, aby uzyskać dostęp do kluczy/wartości w wzorców projektowych, takich jak te:
for sortedKey in sorted(dictionary):
print dictionary[sortedKeY] # gives the values sorted by key
for sortedValue in sorted(dictionary.values()):
print sortedValue # gives the values sorted by value
Nadzieja to pomaga.
Jeśli rzeczywiście chcesz posortować słownika zamiast po prostu uzyskiwania lista posortowana używać collections.OrderedDict
>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']
ze swojego komentarza do gnibbler odpowiedź, powiedziałbym chcesz listę par klucz-wartość posortowane według wartości:
sorted(data.items(), key=lambda x:x[1])
Dzięki za wszystkie odpowiedzi. Jesteś wszyscy moi bohaterowie ;-)
Czy w końcu coś takiego:
d = sorted(data, key = d.get)
for id in d:
text = data[id]
w komentarzu w odpowiedzi na Jana, sugerują, że chcesz klucze i wartości słownika, nie tylko wartości.
PEP 256 proponuje to do sortowania słownika według wartości.
import operator
sorted(d.iteritems(), key=operator.itemgetter(1))
Jeśli chcesz kolejności malejącej, to zrobić
sorted(d.iteritems(), key=itemgetter(1), reverse=True)
żadna metoda lambda
# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
for k, v in d.items():
if v == i:
return (k)
sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:
key = getkeybyvalue(d,i1)
sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')
Można utworzonych posortowana lista z wartości i odbudować słownika:
myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}
newDictionary={}
sortedList=sorted(myDictionary.values())
for sortedKey in sortedList:
for key, value in myDictionary.items():
if value==sortedKey:
newDictionary[key]=value
Wyjście: newDict ionary = {'jeden': '1', 'two': '2', '1four': '4', 'five': '5'}
możliwy duplikat [sortowania wartości słownika Pythona] (http: //stackoverflow.com/questions/6046049/python-dictionary-values-sorting) –
możliwy duplikat [Jak sortować słowniki według kluczy w Pythonie] (http://stackoverflow.com/questions/4642501/how-to-sort -dictionaries-by-keys-in-python) – njzk2
możliwy duplikat http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value Spójrz na to: http: // stackoverflow. com/questions/613183/python-sort-a-dictionary-by-value/4215710 # 4215710 – jimifiki