我試圖從多個打開的文件創建列表,存在一些問題。我需要爲每個文件創建兩個單獨的列表,現在我的代碼只爲迭代的最後一個文件創建兩個列表。建議修復,併爲'file_list'中的每個文件創建獨特的'sample_genes'和'sample_values'?在'for'循環中爲每個打開的文件創建單獨的列表
或者,從所有文件中爲'gene_names'創建單個統一列表,並從所有文件中爲'sample_values'創建單個統一列表也可以。
# Parse csv files for samples, creating lists of gene names and expression values.
file_list = ['CRPC_278.csv', 'PCaP_470.csv', 'CRPC_543.csv', 'PCaN_5934.csv', 'PCaN_6102.csv', 'PCaP_17163.csv']
des_list = ['a', 'b', 'c', 'd', 'e', 'f']
for idx, (f_in, des) in enumerate(zip(file_list, des_list)):
with open(f_in) as des:
cread = list(csv.reader(des, delimiter = '\t'))
sample_genes = [i for i, j in (sorted([x for x in {i: float(j)
for i, j in cread}.items()], key = lambda v: v[1]))]
sample_values = [j for i, j in (sorted([x for x in {i: float(j)
for i, j in cread}.items()], key = lambda v: v[1]))]
# Compute row means.
mean_values = [((a + b + c + d + e + f)/len(file_list)) for i, (a, b, c, d, e, f) in enumerate(zip(sample_1_values, sample_2_values, sample_3_values, sample_4_values, sample_5_values, sample_6_values))]
# Provide proper gene names for mean values and replace original data values by corresponding means.
sample_genes_list = [i for i in sample_1_genes, sample_2_genes, sample_3_genes, sample_4_genes, sample_5_genes, sample_6_genes]
sample_final_list = [sorted(zip(sg, mean_values)) for sg in sample_genes_list]
新的下面的代碼:從字典中拆包字典
# Parse csv files for samples, creating lists of gene names and expression values.
file_list = ['CRPC_278.csv', 'PCaP_470.csv', 'CRPC_543.csv', 'PCaN_5934.csv', 'PCaN_6102.csv', 'PCaP_17163.csv']
full_dict = {}
for path in file_list:
with open(path) as stream:
data = list(csv.reader(stream, delimiter = '\t'))
data = sorted([(i, float(j)) for i, j in data], key = lambda v: v[1])
sample_genes = [i for i, j in data]
sample_values = [j for i, j in data]
full_dict[path] = (sample_genes, sample_values)
結果顯示一些深層次的嵌套結構:
for key in full_dict:
value = full_dict[key]
for key in full_dict[key]:
for idx, items in enumerate(key):
print idx
第一個問題是:關於'des'變量名稱:在循環範圍中使用它兩次,首先解壓縮壓縮列表,然後下一次打開文件對象。另外:不要使用'file'作爲變量名稱,因爲它是python中的一個內置短語。你也有一個語法問題:'{i:float(j)...' - 什麼是花括號?和':'?你想做什麼? –
@PeterVaro:'{a:b for ...}'是一個字典理解,例如,'{i:i for i in range(3)}'產生'{0:0,1:1,2:2 }'。當然,在OP的問題中的使用是很奇怪的...... – torek
這是一個嵌套的列表理解內嵌的列表解析等,驗證以提供正確的輸出,代碼是正確的。修改上面的文件對象名稱。 – user2277435