在字典中提取值列表以进行比较?

时间:2014-07-04 11:37:40

标签: python list python-2.7 dictionary

我有一个大约有2000个值的字典,下面有一个数据示例:

{'chr': [('190', '192'),
  ('190', '252'),
  ('190', '255'),
  ('253', '255'),
  ('337', '339'),
  ('337', '2796'),
  ('337', '2799'),
  ('2797', '2799'),
  ('2801', '2803'),
  ('2801', '3730'),
  ('2801', '3733'),
  ('3731', '3733'),
  ('3734', '3736'),
  ('3734', '5017'),
  ('3734', '5020'),
  ('5018', '5020'),
  ('5234', '5236'),
  ('5234', '5527'),
  ('5234', '5530'),
  ('5528', '5530')]}

我按照每个值条目中的第一个值排序,但我想要做的是将每个值与值列表中的下一个值进行比较,并确定它们之间的重叠程度或它们之间的差异,并将该值添加到一个新的清单。

例如,当比较(190,192)和(190,252)时,重叠2,以便将其添加到名为"距离"的列表中。

我一直试图通过使用代码来解决如何做到这一点:

for key, values in Contigs:
    for i,next(i) in Contigs:
        is = set(i)
        nis = set(next(i))
        is.intersection(nis)

这没有用,但我正在研究必须要选择i和i的下一次迭代进行比较,比较,然后再进行下一次迭代。

任何人都知道如何做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用枚举:

values=d["chr"]

for i,j in enumerate(values[:-1]):
    first,second=set(j),set(values[i+1])  # current value and next
    print first.intersection(second)

如果你想比较第一个元素的最后一个值和第二个元素的第一个值,这将有效但是从你发布的代码我不知道你在哪里或如何减去找到差异:

Distance = []
values=d["chr"]
for i,j in enumerate(values[:-1]):
    first,second=int(j[1]),int(values[i+1][0])
    diff = first - second # not sure if you want this or not
    x = range(first)
    y = range(second)
    distances = list(set(x) & set(y))
    Distance.append(distances)

答案 1 :(得分:0)

以下是使用pairwise recipe

的示例
from itertools import izip, tee

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

>>> [int(a[1])-int(b[0]) for a,b in pairwise(i)]
[2, 62, 2, -82, 2, 2459, 2, -2, 2, 929, 2, -1, 2, 1283, 2, -214, 2, 293, 2]