我是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)]
答案 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)]