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

2024-09-29 02:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我有以下代码(来自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"],
        }

你能帮帮我吗?谢谢


Tags: csv代码name目标datarecorddictreader
3条回答

您只需使用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)

你也可以尝试使用熊猫

将示例数据用作.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因为您有我设置为索引的names列(以便以后成为字典中的顶级键)

.transpose()所以顶级键是名称,而不是特性(AGATC、AATG等)

.to_dict()将pandas.DataFrame转换为python字典

您可以像这样简单地循环使用python中的字典:

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

相关问题 更多 >