2014-02-18 3 views
0

Я новичок в dict(). Я пробую пример defaultdict. (Python 2.6)Python Dict() с идентификационным номером

from collections import defaultdict 

s = 'happy sad happy cry crazy mad sad' 

d = defaultdict(int) 

for k in s.split(): 
    d[k] += 1 

print d.items() 

Результаты:

[('crazy', 1), ('sad', 2), ('mad', 1), ('cry', 1), ('happy', 2)] 

Я просто удивляюсь, что. Можно ли получить идентификатор каждого дикта? Любое предложение?

Ожидать результат:

[(1, 'crazy', 1), (2, 'sad', 2), (3, 'mad', 1), (4, 'cry', 1), (5, 'happy', 2)] 
+4

В словарях нет фиксированного порядка, поэтому здесь нет указателя. –

+0

Вы можете использовать счетчик для подсчета результатов, но заказ не имеет смысла. –

+0

@MartijnPieters жаль, вы имеете в виду, можете подсчитать количество результатов, но не можете использовать count для dict id правильно? – ThanaDaray

ответ

1

Вы можете добавить счетчик к результатам с помощью enumerate(), но учтите, что порядок имеет смысла, поскольку словари не имеют установленный порядок:

[(i,) + item for i, item in enumerate(d.items(), 1)] 

Демо:

>>> [(i,) + item for i, item in enumerate(d.items(), 1)] 
[(1, 'crazy', 1), (2, 'sad', 2), (3, 'mad', 1), (4, 'cry', 1), (5, 'happy', 2)] 

Порядок словаря зависит от истории вставки и удаления. Вы не можете рассчитывать на d.items(), чтобы возвращать пары ключ-значение в определенном порядке.

Порядок делает остаются стабильными до тех пор, пока вы не добавлять или удалять что-либо из словаря, и d.keys(), d.values() и d.items() будет производить списки в том же порядке; zip(d.keys(), d.values()) производит те же пары, что и d.items(). Таким образом, до тех пор, пока сам словарь не будет изменен, вы получите , используя конкретный порядок для этого значения словаря и полагайтесь на него, чтобы он не менялся.

0

Словари неупорядоченны по умолчанию. Возможно, вы сможете получить заказываемый dict here.

Имейте в виду, что ваш ключ является вашим идентификатором в некотором роде. Так что, если у вас нет идентификатора, как int. Вы всегда можете ссылаться на значения по их ключам. Нет никакого смысла иметь индекс и ключ, если у вас есть dict.

Если вы хотите узнать размер dict, вы всегда можете использовать функцию len.

d = dict(a=1, b=2, c=3) 

len(d) 
0
>>> l = [('crazy', 1), ('sad', 2), ('mad', 1), ('cry', 1), ('happy', 2)] 
>>> [(x, y, z) for x, (y, z) in list(enumerate(l, 1))] 
[(1, 'crazy', 1), (2, 'sad', 2), (3, 'mad', 1), (4, 'cry', 1), (5, 'happy', 2)] 
Смежные вопросы