纠正字典中的值

时间:2015-06-29 11:54:04

标签: python dictionary

我使用此代码创建了一个字典:

.box-link

此代码生成一个如下所示的字典:

.box-link:hover .box-visual {
  transform: scale(1.1);
}

来自此文件:

String where = COL_DATE + " = " + 15;
String[] args = null;

我想要做的是从列表中的每个其他值中减去列表中的第一个值(在第一种情况下,第二种情况下为75和25),以获得所需的输出:

import collections

exons = collections.defaultdict(list)
with open('test_coding.txt') as f:
    for line in f:
        chrom, start, end, isoform = line.split()
        exons[isoform].append((int(start), int(end)))

我在想我需要以另一种方式创建我的字典。有点像下面,但我不能让这个功能正常工作。

{'NM_100': [(75, 90), (100, 120)], 'NM_200': [(25, 50), (55, 75), (100, 125), (155, 200)]})

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我的方法是保存你想要在每次迭代中减去的元素,然后使用map函数应用它,非常基本并将结果保存在同一个字典中:

exons = {'NM_100': [(75, 90), (100, 120)], 'NM_200': [(25, 50), (55, 75), (100, 125), (155, 200)]}

for k,v in exons.items():
    x = d1[k][0][0] #Saving the first element of first tuple of each list
    for i,t in enumerate(v):
        exons[k][i] = tuple(map(lambda s: s-x, t)) #just to conserve the original format of your exons dictionany

输出:

>>> exons
{'NM_100': [(0, 15), (25, 45)], 'NM_200': [(0, 25), (30, 50), (75, 100), (130, 175)]}

答案 1 :(得分:1)

如果您确实想要进行此转换,则在读取文件时,您可以创建另一个字典,其中包含密钥isoform,并将值作为列表中的第一个值,然后继续从中删除。

尝试在没有单独的字典或列表的情况下执行此操作的问题是,如果对于第一行执行减法操作,那么对于读入的所有其他值,最终会减去0,这是第一个元素的新值。或者你必须首先创建dict,然后重新遍历它以进行减法。

示例 -

import collections

exons = collections.defaultdict(list)
firstvalues = {}
with open('test_coding.txt') as f:
    for line in f:
        chrom, start, end, isoform = line.split()
        if isoform not in firstvalues:
            firstvalues[isoform] = int(start)
        exons[isoform].append((int(start) - firstvalues[isoform], int(end) - firstvalues[isoform]))

答案 2 :(得分:0)

for key, value in exons.items():
    s = value[0][0]
    exons[key] = [(x[0] - s, x[1]) for x in value]