带有Id编号的Python Dict()

时间:2014-02-18 12:38:49

标签: python dictionary

我是dict()的新手。我试着defaultdict的例子。 (Python 2.6)

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)]

我只是想知道。有没有可能获得每个字典的ID?有什么建议吗?

期待结果:

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

3 个答案:

答案 0 :(得分:2)

您可以使用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()相同的对。因此,只要字典本身没有更改,您可以使用特定字典值的特定顺序,并依赖它不要更改。

答案 1 :(得分:0)

默认情况下,字典是无序的。您或许可以获得有序的字典here

请记住,您的密钥在某种程度上是您的身份。所以,就你没有int的身份证而言。您始终可以通过键来引用值。当你有一个词典时,没有真正意义上有一个索引和一个键。

如果您想知道dict的大小,可以随时使用函数len

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

len(d)

答案 2 :(得分: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)]