Я столкнулся с проблемой в течение пары дней с Python (2.7). У меня есть 2 набора данных, A и B, из 2 разных популяций, содержащих упорядоченные положения вдоль хромосом (определенные по имени, например rs4957684) и их соответствующие частоты в двух популяциях. Большинство позиций в B соответствуют значениям в A. Мне нужно получить частоты в A и B только тех позиций, которые соответствуют A и B, и в соответствующем порядке вдоль хромосом.Итерация над столбцом, содержащим ключи от dict. Возвращаемые сопоставленные ключи из второго dict, сохраняющие порядок ключей от первого dict
Я создал файл csv (df.csv) с 4 столбцами: ключи от A (c1), значения от A (c2), ключи от B (c3), значения от B (c4).
Сначала я создал 2 dicts, dA и dB, с ключами и значениями (положениями и частотами соответственно) от A и B и искал ключи, совпадающие между A и B. Из сопоставленных ключей я сгенерировал 2 новых dicts для A и B (dA2 и dB2). Проблема заключается в том, что, поскольку они являются dicts, я не могу получить порядок совпадающих позиций в хромосомах, поэтому я выяснил еще одну стратегию:
Итерация вдоль c1 и просмотр того, соответствует ли любая клавиша c3 упорядоченным клавишам в c1 , Если да, верните упорядоченный список со значениями (из A и B) совпадающих ключей.
Я написал этот код:
import csv
from collections import OrderedDict
with open('df.csv', mode='r') as infile: # input file
# to open the file in universal-newline mode
reader = csv.reader(open('df.csv', 'rU'), quotechar='"', delimiter = ',')
dA= dict((rows[1],rows[2]) for rows in reader)
dB= dict((rows[3],rows[4]) for rows in reader)
import sys
sys.stdout = open("df2.csv", "w")
for key, value in dB:
if rows[3] in dA.key():
print rows[2], rows[4]
Вот сценарий, кажется, бежать, но я не получаю выход
# I also tried this:
for row in reader:
if row[3] in dA.key():
print row[4]
... и у меня такая же проблема.
Почему вы не пользуетесь OrderedDict? –
Также обратите внимание, что вы не можете перебирать словарь следующим образом: 'для ключа, значение в дБ', вы должны вызывать метод' iteritems', если вам нужны как ключ, так и значение. –