[英]Looping through nested dictionary values to populate second dictionary - python
我有以下字典:
rts = {
"PO1": {
"congruent": {
"rt": [0.647259, 0.720116, 0.562909, 0.538918, 0.633367],
"correct": ["True", "True", "True", "True", "True", "False",]
},
"incongruent": {
"rt": [0.647259, 0.720116, 0.562909, 0.538918, 0.633367],
"correct": ["True", "True", "True", "True", "True", "False",]
}
},
"PO2": {
"congruent": {
"rt": [0.647259, 0.720116, 0.562909, 0.538918, 0.633367],
"correct": ["True", "True", "True", "True", "True", "False",]
},
"incongruent": {
"rt": [0.647259, 0.720116, 0.562909, 0.538918, 0.633367],
"correct": ["True", "True", "True", "True", "True", "False",]
}
}
}
這是我到目前為止的代碼:
import csv
from pathlib import Path
import json
import numpy as np
from numpy import array
def main():
rts = {}
statsDict = {}
data = Path('C:/Users/oli.warriner/Desktop/data(2)/data')
for csvfile in data.glob('*.csv'):
key = csvfile.stem
with csvfile.open() as f:
csv_reader = csv.reader(f)
# Skip the header
_ = next(csv_reader)
rts[key] = {
'congruent': {
'rt': [],
'correct': []
},
'incongruent': {
'rt': [],
'correct': []
},
}
for tn, ctext, cname, condition, response, rt, correct in csv_reader:
rts[key][condition]['rt'].append(float(rt))
rts[key][condition]['correct'].append(correct)
for k in rts:
key = k
statsDict[key] = {
'congruent': {
'mean': [],
'stddev': [],
'correct': []
},
'incongruent': {
'mean': [],
'stddev': [],
'correct': []
},
}
for n in rts[k]:
for i in rts[key][n]
array([rts[k] for k in rts]).mean()
print(array)
if __name__ == "__main__":
main()
我正在讀取一個 csv 文件目錄以生成您在上面看到的“rts”字典(它比我剛剛在這里縮短的要大得多)。
我現在要做的是使用“rts”字典來填充“statsDict”。
我需要遍歷“rts”字典並分別計算每個鍵的“一致”和“不一致”值中“rt”值的均值和標准差。
然后我需要為每個鍵使用“正確”的布爾值來計算每個鍵中真值的百分比。
我正在設法遍歷字典上的前幾層,但是現在我有點迷茫,我不確定如何進入下一層並開始進行我需要的統計計算。
希望這對人們來說已經足夠清楚了。 如果您有任何問題,請告訴我。 提前致謝!
根據給出的rts
示例,您可以使用以下代碼片段構建一個包含統計信息的字典:
import statistics
import json
rts = { ... as given ... }
stats_dict = {}
for k in rts.keys():
stats_dict[k] = {}
for ck in rts[k].keys():
stats_dict[k][ck] = {}
stats_dict[k][ck]["mean"] = statistics.mean(rts[k][ck]["rt"])
stats_dict[k][ck]["stdev"] = statistics.stdev(rts[k][ck]["rt"])
stats_dict[k][ck]["true_percentage"] = len([x for x in rts[k][ck]["correct"] if x == "True"]) / len(rts[k][ck]["correct"])
print(json.dumps(stats_dict, indent=2))
numpy
來計算靜態。 內置statistics
包就夠了rts
的鍵,並為統計字典stats_dict
使用相同的鍵{
"PO1": {
"congruent": {
"mean": 0.6205138,
"stdev": 0.07207165926839758,
"true_percentage": 0.8333333333333334
},
"incongruent": {
"mean": 0.6205138,
"stdev": 0.07207165926839758,
"true_percentage": 0.8333333333333334
}
},
"PO2": {
"congruent": {
"mean": 0.6205138,
"stdev": 0.07207165926839758,
"true_percentage": 0.8333333333333334
},
"incongruent": {
"mean": 0.6205138,
"stdev": 0.07207165926839758,
"true_percentage": 0.8333333333333334
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.