将类似字典的字典附加到字典python中

时间:2015-01-13 07:11:35

标签: python dictionary

我的列表如下:372 374 375 533 849 1057 734 640 853 2 672 581 352 384 386 505 421 372 374 375 734 1354 1355 我正在尝试建立一个字典,提到哪个数字跟随一定数量以及重复重复的次数。

即。 ['372':('374',2),'375':('533',1),('734',1)......]

所以键是所有项目,如果更适合访问,则值是元组列表或字典列表。我已经尝试构建一个字典,其中第一次出现数字作为键,紧接着之后的值作为其值,但由于它们是strs,我无法附加到它们。有没有办法定义字典来匹配这个结构?

for i,j in zip(xrange(0,len(IDs)), xrange(1,len(IDs))):
    if not IDs[i] in mydict:
        mydict[IDs[i]]=IDs[j]
    else:
        mydict[IDs[i]].append(IDs[j])

我非常感谢你的指导。

3 个答案:

答案 0 :(得分:1)

from collections import defaultdict
ids = [372, 374, 375, 533, 849, 1057, 734, 640, 853, 2, 672, 581, 352, 384, 386, 505, 421, 372, 374, 375, 734, 1354, 1355]
mydict = defaultdict(lambda: defaultdict(int))
for i in xrange(len(ids)-1):
    mydict[ids[i]][ids[i+1]] += 1

示例输出:

>>>mydict[372]
defaultdict(<type 'int'>, {374: 2})

答案 1 :(得分:0)

正如您希望每个数字,数字后跟及其元组中的计数

但是例如数字 734 ,其后跟 640 1354

我们无法将734:(640, 1), 734:(1354, 1)作为输出 dict ,因为我们无法拥有重复键

所以这可能是可能的解决方案之一。

my_list = [372, 374, 375, 533, 849, 1057, 734, 640, 
           853, 2, 672, 581, 352, 384, 386, 505, 
           421, 372, 374, 375, 734, 1354, 1355]

from collections import Counter           
result = Counter(zip(my_list[:-1], my_list[1:]))
print result 

<强>产量

Counter({
            (374, 375): 2, 
            (372, 374): 2, 
            (375, 734): 1, 
            (352, 384): 1, 
            (1354, 1355): 1, 
            (505, 421): 1, 
            (734, 1354): 1, 
            (853, 2): 1, 
            (849, 1057): 1, 
            (384, 386): 1, 
            (2, 672): 1, 
            (421, 372): 1, 
            (375, 533): 1, 
            (672, 581): 1, 
            (581, 352): 1, 
            (533, 849): 1, 
            (1057, 734): 1, 
            (640, 853): 1, 
            (386, 505): 1, 
            (734,640): 1
                          })

你可以计算对象:

print "(374, 375): ", result[(374, 375)]
print "(374, 375): ", result[(734,640)]

结果:

(374, 375):  2
(374, 375):  1

答案 2 :(得分:0)

我相信这就是你想要的

    my_list = [372, 374, 375, 533, 849, 1057, 734, 640, 
               853, 2, 672, 581, 352, 384, 386, 505, 
               421, 372, 374, 375, 734, 1354, 1355
              ]

    adict = {}
    for k in range(len(my_list)-1):

        count = 0
        now_at = my_list[k]
        nxt_at = my_list[k+1]

        for i in range(len(my_list)-1):
            curr = my_list[i]
            nxt = my_list[i+1]

            if now_at == curr and nxt_at == nxt:
                count += 1
                adict[now_at] = (nxt_at , count)