python - 创建字典的子集,按值列表对原始字典进行排序。

标签 python dictionary filter genetics

我正在创建一个字典(第一段代码),并且希望能够根据其值过滤掉我不需要的键,然后将其输出到 CSV。

我想要匹配的值存储在一个列表中,该列表在下面的第二个代码块中生成。

全部都是字符串,没有整数。

这是迄今为止我的代码:

#new_dict = raw_input("Enter Dictionary Name")
#source: http://bit.ly/1iOS0e3
import csv
new_dict = {}
with open(raw_input("Enter csv file (including path)"), 'rb') as f:
  reader = csv.reader(f)
  for row in reader:
    if row[0] in new_dict:
      new_dict[row[0]].append(row[1:])
    else:
      new_dict[row[0]] = row[1:]
print new_dict

还有列表:

#modified from: http://bit.ly/1iOS7Gu
import pandas
colnames = ['Date Added to Catalog',    'PUBMEDID', 'First Author', 'Date', 'Journal',  'Link', 'Study',    'DT',   'Initial Sample Size',  'Replication Sample Size',  'Region',   'Chr_id',   'Chr_pos',  'Reported Gene(s)', 'Mapped_gene',  'p-Value',  'Pvalue_mlog',  'p-Value (text)',   'OR or beta',   '95% CI (text)',    'Platform [SNPs passing QC]',   'CNV']
data = pandas.read_csv('C:\Users\Chris\Desktop\gwascatalog.csv', names=colnames)

最佳答案

要限制添加到字典中的行,您可以创建一个名为 filter,其中包含您要保留的键。这可以从您的 pandas DataFrame 获取,例如假设您想使用 Journal CSV 字段作为键:

filter = set(data.Journal.values)

然后,您可以修改 for 循环来检查我们是否应该存储 CSV 文件中的行。这可能如下所示:

for row in reader:
    if row[0] in filter:
        if row[0] in new_dict:
            new_dict[row[0]].append(row[1:])
        else:
            new_dict[row[0]] = [row[1:]]
<小时/>

根据您的评论,如果您想按行分隔记录,则需要更改行

new_dict[row[0]] = row[1:]

至:

new_dict[row[0]] = [row[1:]]

在第一种情况下,row = [1, 2, 3, 4, 5]:

my_list = row[1:]
# my_list = [2, 3, 4, 5]
my_list.append(row[1:])
# my_list = [2, 3, 4, 5, [2, 3, 4, 5]]

在第二种情况下:

my_list = [row[1:]]
# my_list = [[2, 3, 4, 5]]
my_list.append(row[1:])
# my_list = [[2, 3, 4, 5], [2, 3, 4, 5]]

关于python - 创建字典的子集,按值列表对原始字典进行排序。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754790/

相关文章:

python - 如何在 django 中制作 db 转储文件

python - C - 导入 Python 模块

dictionary - map 应用从哪里开始

Android ArrayAdapter过滤问题

python - getattr() 与 __dict__ 查找,哪个更快?

python - 类型错误 : search() got an unexpected keyword argument 'doc_type' for elastic search version 5. 6

python - 将列表附加到匹配键值的值

python - 是否可以在没有双重拆分的情况下从未解析的字符串列表构造字典理解?

javascript - RethinkDB JavaScript 日期过滤器

grails - 过滤器中的渲染 GSP 不起作用