В Python, как получить частичный вид dict?

Можно ли получить частичный вид dict в Python, аналогичный pandas df.tail()/df.head(). Скажем, у вас очень длинный dict, и вы просто хотите проверить некоторые элементы (начало, конец и т.д.) dict. Что-то вроде:

dict.head(3)  # To see the first 3 elements of the dictionary.

{[1,2], [2, 3], [3, 4]}

Спасибо

Ответы

Ответ 1

Извращенное желание, но вы можете получить это, используя этот

dict(islice(mydict.iteritems(), 0, 2))

или для коротких словарей

# Python 2.x
dict(mydict.items()[0:2])

# Python 3.x
dict(list(mydict.items())[0:2])

Ответ 2

def glance(d):
    return dict(itertools.islice(d.iteritems(), 3))

>>> x = {1:2, 3:4, 5:6, 7:8, 9:10, 11:12}
>>> glance(x)
{1: 2, 3: 4, 5: 6}

Однако:

>>> x['a'] = 2
>>> glance(x)
{1: 2, 3: 4, u'a': 2}

Обратите внимание, что вставка нового элемента изменила то, что "первые" три элемента были непредсказуемыми. Это то, что люди имеют в виду, когда говорят, что дикты не заказываются. Вы можете получить три элемента, если хотите, но вы не можете знать, какие три они будут.

Ответ 3

Я знаю, что этому вопросу уже 3 года, но здесь Pythonic версия (возможно, более простая, чем описанные выше методы) для Python 3.*:

[print(v) for i, v in enumerate(my_dict.items()) if i < n]

Он напечатает первые n элементов словаря my_dict

Ответ 4

однозначное решение @Neb с Python 3 пониманием:

{k: v for i, (k, v) in enumerate(my_dict.items()) if i < n}

Он возвращает дикт, а не распечатки

Ответ 5

Из документация:

Подробности реализации CPython: Ключи и значения перечислены в произвольный порядок, который является неслучайным, варьируется в зависимости от Python реализаций и зависит от истории вложений в словарях и удаления.

В лучшем случае я только поиграл с другими реализациями Python (например, PyPy, IronPython и т.д.), поэтому я не знаю наверняка, так ли это во всех реализациях Python, но общая идея dict/hashmap/hash/etc - это то, что ключи неупорядочены.

При этом вы можете использовать OrderedDict из библиотеки collections. OrderedDict запомнить порядок ключей по мере их ввода.

Ответ 6

Если ключи сортируются некорректно, вы можете сделать это:

head = dict([(key, myDict[key]) for key in sorted(myDict.keys())[:3]])

Или, возможно:

head = dict(sorted(mydict.items(), key=lambda: x:x[0])[:3])

Где x[0] - ключ каждой пары ключ/значение.

Ответ 7

Для тех, кто предпочел бы решить эту проблему с pandas dataframes. Просто mydict ваш словарь mydict в информационный mydict, поверните его и получите первые несколько строк:

pd.DataFrame(mydict, index=[0]).T.head()

0 hi0 1 hi1 2 hi2 3 hi3 4 hi4

Ответ 8

Редактировать:

в Python 3.x: без использования библиотек это можно сделать таким образом. Используйте метод:

.Предметы()

который возвращает список ключей словаря со значениями.

Необходимо преобразовать его в список, иначе произойдет ошибка: объект "my_dict" недопустим. Затем преобразуйте его в словарь. Теперь он готов нарезать квадратными скобками.

dict(list(my_dict.items())[:3])