Один вариант - использовать str
, а затем to_datetime
(или аналогичный):
In [11]: str(dt64)
Out[11]: '2012-05-01T01:00:00.000000+0100'
In [12]: pd.to_datetime(str(dt64))
Out[12]: datetime.datetime(2012, 5, 1, 1, 0, tzinfo=tzoffset(None, 3600))
Примечание: он не равен dt
, потому что он становится "offset-aware" :
In [13]: pd.to_datetime(str(dt64)).replace(tzinfo=None)
Out[13]: datetime.datetime(2012, 5, 1, 1, 0)
Это кажется неэлегантным.
.
Обновление: это может касаться «неприятный пример»:
In [21]: dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100')
In [22]: pd.to_datetime(str(dt64)).replace(tzinfo=None)
Out[22]: datetime.datetime(2002, 6, 28, 1, 0)
Не возможно отсортировать словарь, только получить представление словаря, который отсортирован. Словари являются по сути беспорядочными, но другими типами, такими как списки и кортежи, не. Таким образом, Вам нужен заказанный тип данных для представления отсортированных значений, которые будут list—, вероятно, список кортежей.
, Например,
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
sorted_x
будет список кортежей, отсортированных по второму элементу в каждом кортеже. dict(sorted_x) == x
.
И для тех, которые желают отсортировать на ключах вместо значений:
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
В Python3, так как распаковка не позволяется [1] , мы можем использовать
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
, Если Вы хотите вывод как dict, можно использовать collections.OrderedDict
:
import collections
sorted_dict = collections.OrderedDict(sorted_x)
Можно создать "инвертированный индекс", также
from collections import defaultdict
inverse= defaultdict( list )
for k, v in originalDict.items():
inverse[v].append( k )
Теперь инверсия имеет значения; каждое значение имеет список применимых ключей.
for k in sorted(inverse):
print k, inverse[k]
Dicts не может быть отсортирован, но можно создать отсортированный список от них.
А отсортировал список значений dict:
sorted(d.values())
список А (ключ, значение) пары, отсортированные по значению:
from operator import itemgetter
sorted(d.items(), key=itemgetter(1))
В значительной степени то же как ответ Hank Gay :
sorted([(value,key) for (key,value) in mydict.items()])
Или оптимизированный немного, как предложил John Fouhy:
sorted((value,key) for (key,value) in mydict.items())
Вы можете использовать:
sorted(d.items(), key=lambda x: x[1])
Это отсортирует словарь по значениям каждой записи в словаре от наименьшего к наибольшему.
Чтобы отсортировать его в порядке убывания, просто добавьте reverse = True
:
sorted(d.items(), key=lambda x: x[1], reverse=True)
sorted (dict1, key = dict1 .get)
Ну, вообще-то возможно «отсортировать по словарным значениям». Недавно мне пришлось сделать это в Code Golf (вопрос о переполнении стека Code golf: частотная диаграмма слов ). В сокращенном виде проблема была такого рода: учитывая текст, посчитайте, как часто встречается каждое слово, и выведите список самых популярных слов, отсортированных по убыванию частоты.
Если вы построите словарь со словами в качестве ключей и количеством вхождений каждого слова в качестве значения, упрощенного здесь как:
from collections import defaultdict
d = defaultdict(int)
for w in text.split():
d[w] += 1
, то вы можете получить список слов, упорядоченный по частоте использования с sorted (d, key = d.get)
- сортировка выполняется по ключам словаря, используя количество вхождений слова в качестве ключа сортировки.
for w in sorted(d, key=d.get, reverse=True):
print w, d[w]
Я пишу это подробное объяснение, чтобы проиллюстрировать, что люди часто имеют в виду, говоря «Я могу легко отсортировать словарь по ключу, но как мне отсортировать по значению» - и я думаю, что OP пытался решить такую проблему. И решение состоит в том, чтобы составить своего рода список ключей на основе значений, как показано выше.
В последней версии Python 2.7 у нас есть новый тип OrderedDict , который запоминает порядок, в котором были добавлены элементы.
>>> d = {"third": 3, "first": 1, "fourth": 4, "second": 2}
>>> for k, v in d.items():
... print "%s: %s" % (k, v)
...
second: 2
fourth: 4
third: 3
first: 1
>>> d
{'second': 2, 'fourth': 4, 'third': 3, 'first': 1}
Чтобы создать новый упорядоченный словарь из исходного, сортировка по значениям:
>>> from collections import OrderedDict
>>> d_sorted_by_value = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
OrderedDict ведет себя как обычный dict:
>>> for k, v in d_sorted_by_value.items():
... print "%s: %s" % (k, v)
...
first: 1
second: 2
third: 3
fourth: 4
>>> d_sorted_by_value
OrderedDict([('first': 1), ('second': 2), ('third': 3), ('fourth': 4)])