我怎样才能循环浏览这本字典而不是硬编码钥匙呢



到目前为止,我有这个代码(来自cs50/pset6/DNA(:

import csv
data_dict = {}
with open(argv[1]) as data_file:
reader = csv.DictReader(data_file)
for record in reader:
# `record` is a dictionary of column-name & value
name = record["name"]
data = {
"AGATC": record["AGATC"],
"AATG": record["AATG"],
"TATC": record["TATC"],
}
data_dict[name] = data
print(data_dict)

输出

{'Alice': {'AATG': '8', 'AGATC': '2', 'TATC': '3'},
'Bob': {'AATG': '1', 'AGATC': '4', 'TATC': '5'},
'Charlie': {'AATG': '2', 'AGATC': '3', 'TATC': '5'}}

这是csv文件:

name,AGATC,AATG,TATC
Alice,2,8,3
Bob,4,1,5
Charlie,3,2,5

但我的目标是实现完全相同的事情,但不是对密钥AATG等进行硬编码,也因为我将使用一个更大的数据库,其中包含更多的值,所以我希望能够循环浏览数据,而不是这样做:

data = {
"AGATC": record["AGATC"],
"AATG": record["AATG"],
"TATC": record["TATC"],
}

你能帮帮我吗?感谢

您也可以尝试使用panda。

使用.csv文件形式的示例数据:

pandas.read_csv('example.csv', index_col = 0).transpose().to_dict()

输出:

{'Alice': {'AGATC': 2, 'AATG': 8, 'TATC': 3},
'Bob': {'AGATC': 4, 'AATG': 1, 'TATC': 5},
'Charlie': {'AGATC': 3, 'AATG': 2, 'TATC': 5}}

index_col = 0,因为您有名称列,我将其设置为索引(以便稍后成为字典中的顶级键(

.transpose(),因此顶级密钥是名称,而不是功能(AGATC、AATG等(

CCD_ 4转化大熊猫。DataFrame到python字典

您可以简单地使用pandas:

import csv
import pandas as pd
data_dict = {}
with open(argv[1]) as data_file:
reader = csv.DictReader(data_file)
df = pd.DataFrame(reader)
df = df.set_index('name') # set name column as index
data_dict = df.transpose().to_dict() # transpose to make dict with indexes

print(data_dict)

您可以简单地在python中循环遍历字典,如下所示:

for key in dictionary:
print(key, dictionary[key])

您使用csv是正确的。DictReader。

import csv
from pprint import pprint
data_dict = {}
with open('fasta.csv', 'r') as f:
reader = csv.DictReader(f)
for record in reader:
name = record.pop('name')
data_dict[name] = record
pprint(data_dict)

打印

{'Alice': {'AATG': '8', 'AGATC': '2', 'TATC': '3'},
'Bob': {'AATG': '1', 'AGATC': '4', 'TATC': '5'},
'Charlie': {'AATG': '2', 'AGATC': '3', 'TATC': '5'}}

最新更新