Python:将此列表转换为字典

时间:2010-10-18 02:10:07

标签: python list dictionary formatting

我遇到了问题,并且不知道如何在python中编码。

我有list[10, 10, 10, 20, 20, 20, 30]

我希望它出现在像这样的词典中

{"10": 1, "20":  3, "30" : 1}

我怎么能实现这个目标?

4 个答案:

答案 0 :(得分:15)

from collections import Counter
a = [10, 10, 10, 20, 20, 20, 30]
c = Counter(a)
# Counter({10: 3, 20: 3, 30: 1})

如果您真的想将密钥转换为字符串,那么这是一个单独的步骤:

dict((str(k), v) for k, v in c.iteritems())

这个类是Python 2.7的新功能;对于早期版本,请使用此实现:

http://code.activestate.com/recipes/576611/


编辑:删除此处,因为SO不会让我将代码粘贴到评论中,

from collections import defaultdict
def count(it):
    d = defaultdict(int)
    for j in it:
        d[j] += 1
    return d

答案 1 :(得分:4)

另一种不使用setCounter的方式:

d = {}
x = [10, 10, 10, 20, 20, 20, 30]
for j in x:
    d[j] = d.get(j,0) + 1

编辑:对于包含100个唯一项目的1000000大小的列表,此方法在我的笔记本电脑上运行0.37秒,而使用set的答案需要2.59秒。对于仅10个独特的项目,前一种方法需要0.36秒,而后一种方法只需0.25秒。

编辑:使用defaultdict的方法在我的笔记本电脑上花费0.18秒。

答案 2 :(得分:1)

喜欢这个

l = [10, 10, 10, 20, 20, 20, 30]
uniqes = set(l)
answer = {}
for i in uniques:
    answer[i] = l.count(i)

answer现在是您想要的词典

希望这有帮助

答案 3 :(得分:1)

在Python> = 2.7中你可以使用dict理解,比如:

>>> l = [10, 10, 10, 20, 20, 20, 30]
>>> {x: l.count(x) for x in l}
{10: 3, 20: 3, 30: 1}

不是最快的方式,但非常适合小型列表

更新

或者,受督察G4dget的启发,这更好:

{x: l.count(x) for x in set(l)}