簡體   English   中英

Python中的字典和文件

[英]Dictionaries and files in python

大家好,第一次問這里。

我試圖弄清楚如何創建一個包含鍵作為ID的字典,以及如何將值作為另一個包含該個人ID的家庭作業論文和考試分數的字典的值。

例:

{"173-25-6389":
    {
        "hw":[94,89,92,73], 
        "quiz":[45,36,42,50,22,27,40,41], 
        "exam":[135,127]
    },
.....
}

這些數字是從代表類別的單獨文件中提取的,每個文件都與它們對應的ID相匹配。

我有4個文件可以使用,其中一個僅包含ID,我認為我將把它們應用於較大詞典中的鍵。

我的主要問題是在文件內部,每一行的編寫方式如下:

173-25-6389 61

因此,它是id加上space ,然后是score 我不確定如何遍歷文件並搜索具有相同ID的其他樂譜。

關於如何找到分數列表,然后將其添加到字典中作為包含ID的較大字典的值,我有點困惑。 任何關於如何做到這一點的見解都將是驚人的,如果您需要我詳細說明,請告訴我。

我只編碼了大約一年,所以對我輕松一點。 謝謝

因此,假設您已經知道如何打開文件並逐行讀取它。 每行都有一個ID和一個分數,但是您不知道分數是否已存在於結果字典中。 坦白說,您寧可不在乎。 輸入defaultdict 即使特定的鍵不存在,它也可以保證您的有用價值。

from collections import defaultdict
…
result = defaultdict(dict) # an undefined key will map an empty dict
for line in scorefile:
    id, score = line.split()
    result[id]['hw'] = score

但是,等等,這將用一個分數覆蓋我們的“硬件”鍵! 我們想要一個清單!

讓我們對這個defaultdict加倍。

# an undefined key will map a defaultdict
# whose undefined keys will map an empty list
result = defaultdict(lambda: defaultdict(list))
for line in scorefile:
    id, score = line.split()
    result[id]['hw'].append(score)

現在,您沒有說我們如何通過考試成績來講述家庭作業,所以我將由您自己決定……

我想到了。 我敢打賭,有一種更加整潔的方式編寫它,甚至使用某種形式的遞歸,我還沒有足夠的經驗來弄清楚它。 但這就是我所得到的,它使我得到了所需的東西。 謝謝您的幫助!

def create_dictionary(idfilename,hwfilename,qzfilename,examfilename):
idread = open(idfilename, 'r')
hwread = open(hwfilename, 'r')
qzread = open(qzfilename, 'r')
examread = open(examfilename, 'r')
dict = {}
dicthw = {}
dictqz = {}
dictexam = {}

for line in idread:
    if line not in dict:
        dict[line.rstrip('\n')] = {}
for line in hwread:
    name, score = line.split()
    if name in dicthw:
        dicthw[name].append(score)
    else:
        dicthw[name] = [score]
for line in qzread:
    name, score = line.split()
    if name in dictqz:
        dictqz[name].append(score)
    else:
        dictqz[name] = [score]
for line in examread:
    name, score = line.split()
    if name in dictexam:
        dictexam[name].append(score)
    else:
        dictexam[name] = [score]
for k, v in dicthw.items():
    if len(v) < 4:
        while len(v) < 4:
            v.append(0)
    if k in dict:
        dict[k] = ({'hw':v})
for k, v in dictqz.items():
    if len(v) < 8:
        while len(v) < 8:
            v.append(0)
    if k in dict:
        qz_update = {'qz':v}
        dict[k].update(qz_update)
for k, v in dictexam.items():
    if len(v) < 2:
        while len(v) < 2:
            v.append(0)
    if k in dict:
        exam_update = {'exam':v}
        dict[k].update(exam_update)
return(dict)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM