我的列表如下: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])
我非常感谢你的指导。
答案 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)