问题
def positive(self):
total = {}
final = {}
for word in envir:
for i in self.lst:
if word in i:
if word in total:
total[word] += 1
else:
total[word] = 1
final = sorted(total, reverse = True)
return total
This returns
{'climate': 10, 'ecosystem': 1, 'energy': 6, 'human': 1, 'world': 2, 'renewable': 2, 'native': 2}
I want to get this dictionary back to a dictionary that is in order. How do you I sort it and return a dictionary?
回答1:
An ordered dictionary would get you what you need
from collections import OrderedDict
If you want to order your items in lexicographic order, then do the following
d1 = {'climate': 10, 'ecosystem': 1, 'energy': 6, 'human': 1, 'world': 2, 'renewable': 2, 'native': 2}
od = OrderedDict(sorted(d1.items(), key=lambda t: t[0]))
Contents of od
:
OrderedDict([('climate', 10),
('ecosystem', 1),
('energy', 6),
('human', 1),
('native', 2),
('renewable', 2),
('world', 2)])
If you want to specify exactly which order you want your dictionary, then store them as tuples and store them in that order.
t1 = [('climate',10), ('ecosystem', 1), ('energy',6), ('human', 1), ('world', 2), ('renewable', 2), ('native', 2)]
od = OrderedDict()
for (key, value) in t1:
od[key] = value
od
is now
OrderedDict([('climate', 10),
('ecosystem', 1),
('energy', 6),
('human', 1),
('world', 2),
('renewable', 2),
('native', 2)])
In use, it is just like a normal dictionary, but with its internal contents' order specified.
回答2:
Dictionaries in Python have no explicit order (except in 3.6). There is no property of 'order' in a hash table. To preserve order in Python, use a list of tuples:
unordered = (('climate', 10,), ('ecosystem', 1)) # etc
Calling sorted(unordered)
on the above will give it back with the 'key' being the first item in each individual tuple. You do not need to provide any other arguments to sorted()
in this case.
To iterate, use for x, y in z:
where z
is the list.
来源:https://stackoverflow.com/questions/41082822/how-to-make-a-dictionary-retain-its-sort-order