我有一个这样的清单:
list=[[21768L, u'2'], [1746L, u'2'], [2239L, u'2'],[2239L, u'2'], [1965L, u'2'],[1965L, u'2'], [2425L, u'1'], [2425L, u'1'],[2056L, u'1']]
如何以字典的形式获得上述列表:
d={u'1':[2425L,2],[2056L,1] , u'2': [21768L, 1],[1746L,1],[2239L,2],[1965L,2]}
答案 0 :(得分:9)
使用defaultdict
模块中的Counter
和collections
:
from collections import defaultdict, Counter
d = defaultdict(Counter)
for value, key in yourlist:
d[key].update([value])
这给你略有不同的结构:
defaultdict(<class 'collections.Counter'>, {u'1': Counter({2425L: 2, 2056L: 1}), u'2': Counter({1965L: 2, 2239L: 2, 21768L: 1, 1746L: 1})})
但可以按摩到更接近你想要的东西:
d = {key: value.most_common() for key, value in d.iteritems()}
给出:
{u'1': [(2425L, 2), (2056L, 1)], u'2': [(1965L, 2), (2239L, 2), (21768L, 1), (1746L, 1)]}
答案 1 :(得分:0)
>>> from collections import defaultdict, OrderedDict
>>> L = [[21768L, u'2'], [1746L, u'2'], [2239L, u'2'], [2239L, u'2'], [1965L, u'2'],[1965L, u'2'], [2425L, u'1'], [2425L, u'1'], [2056L, u'1']]
>>> d = defaultdict(OrderedDict)
>>> for value, key in L:
d[key][value] = d[key].get(value, 0) + 1
>>> d
defaultdict(<class 'collections.OrderedDict'>,
{u'1': OrderedDict([(2425L, 2), (2056L, 1)]),
u'2': OrderedDict([(21768L, 1), (1746L, 1), (2239L, 2), (1965L, 2)])})