2

我有一个这样的列表:

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]}
4

2 回答 2

9

使用模块中的 a和defaultdicta :Countercollections

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)]}
于 2013-04-03T12:02:43.160 回答
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)])})
于 2013-04-03T12:32:20.337 回答