вычесть значения двух словарей python - PullRequest
1 голос
/ 01 апреля 2012

Это может быть очень наивный вопрос. Я пытаюсь сравнить значения двух словарей по:

distance = dictionary1[position] - dictionary2[position]

но он не работает, он дает мне первое значение dictionary1.

Я также пытался с:

set distance = set(dictionary1[position]) - set(dictionary2[position])

но получите тот же результат.

Любая идея, как значения из двух словарей могут быть вычтены?

Словари 1 и 2 похожи на:

dictionary1 = {'chr1': '3434351', 'chr10': '5329532', 'chr11': '2355620',
               'chr12': '40841359', 'chr13': '101523938', 'chr14': '453255816',
               'chr17': '491453323', 'chr18': '22361089', 'chr19': '34965774',
               'chr2': '16025716', 'chr20': '295671539', 'chr21': '2067974'}

dictionary2 = {'chr1': '15845763', 'chr10': '186537818', 'chr11': '3715102',
               'chr12': '1138647613', 'chr13': '123235062', 'chr14': '68159413',
               'chr15': '51790735', 'chr16': '19324170', 'chr17': '78184979',
               'chr18': '76968073', 'chr19': '37299170', 'chr2': '18329102',
               'chr20': '31934245', 'chr22': '32679692'}

Ответы [ 3 ]

3 голосов
/ 01 апреля 2012

Использование словосочетания:

{ k:int(dic1[k]) - int(dic2[k]) for k in dic1 if k in dic2 }

Или для Python <2.7: </p>

dict((k,int(dic1[k]) - int(dic2[k])) for k in dic1 if k in dic2)
0 голосов
/ 01 апреля 2012
dictionary1 = {'chr1': '3434351', 'chr10': '5329532', 'chr11': '2355620',
             'chr12': '40841359', 'chr13': '101523938', 'chr14': '453255816'}
dictionary2 = {'chr1': '15845763', 'chr10': '186537818', 'chr11': '3715102',
             'chr12': '1138647613', 'chr13': '123235062', 'chr14': '68159413'}

dictionary3 = {}

# Assuming dictionary1 and dictoinary2 are the same size and have the same key
for key in dictionary1.keys():
    if key in dictionary1:
        if key in dictionary2:
            # Calculate the new value for dictionary3, by using int()
            newValue = int(dictionary1[key]) - int(dictionary2[key])
            dictionary3[key] = newValue
        else:
            print(key, 'is not in dictionary2')
    else:
        print(key, 'is not in dictionary1')

print(dictionary3)

Вывод

{'chr1': -12411412, 'chr13': -21711124, 'chr12': -1097806254, 
 'chr11': -1359482, 'chr10': -181208286, 'chr14': 385096403}

Я думаю, что вы можете использовать int(), а затем вы можете рассматривать их как целые числа.Я думаю, что это один из простых способов сделать это.Конечно, также неплохо бы обеспечить проверку, чтобы убедиться, что существует один и тот же ключ (chr1x), в противном случае это приведет к ошибке или вам придется что-то выяснить.

0 голосов
/ 01 апреля 2012

Мне пришлось использовать обходной путь для решения проблемы ключей, которых нет в обоих словарях. Вы должны позаботиться об этом по вашему усмотрению. Я установил значение на ноль, когда ключа там не было.

keys = dictionary1.keys()
keys.extend(dictionary2.keys())

keys = set(keys)
dic = dict()
for key in keys:
    dic[key] = int(dictionary1.get(key,0)) - int(dictionary2.get(key,0))

print dic    

Выходы:

{'chr2': -2303386, 'chr1': -12411412, 'chr21': 2067974, 'chr13': -21711124, 'chr
12': -1097806254, 'chr11': -1359482, 'chr10': -181208286, 'chr17': 413268344, 'c
hr16': -19324170, 'chr15': -51790735, 'chr14': 385096403, 'chr20': 263737294, 'c
hr22': -32679692, 'chr19': -2333396, 'chr18': -54606984}

Редактировать Как Никлас Б. указывает в своем комментарии, вы также можете использовать словарь . Однако они не доступны в питонах <2.7. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...