用于提取字典值的循环过早结束

时间:2017-12-10 00:39:50

标签: python python-3.x python-2.7

我试图使用这本词典:

student_data_dict = {'Student_1': 'bbbeaddacddcddaaadbaabdad', 'Student_2': 'acbccaddcadaaacdadbcabcad', 'Student_3': 'babcabdccadcDdbccdbaadbad', 'Student_4': 'bcbcabddcadcdabccdbaadcbd', 'Student_5': 'DCBCCADDCADBDACCDBBACBCAD', 'Student_6': 'acbeccddcadbaaccabbacdcad', 'Student_7': 'BCBCBCDABADCADCCDABAACCAD', 'Student_8': 'dcbccbddcadaabcbcacabbcad', 'Student_9': 'DDBDBBCDDCCBABCCBACADAAAC', 'Student_10': 'cbbdacdacadcbadbabaabcaTa', 'Student_11': 'BDBECADCAADCAAAAACBACACAD', 'Student_12': 'DBBCCBDCCADCDABABCBAABCAD', 'Student_13': 'BCBCBCDDCADCAAACCABACACAD', 'Student_14': 'DBBECBDACADAAACBCBAAABCBD', 'Student_15': 'acbebbddcadbaacccbcaddcad', 'Student_16': 'ACBEBCDDCADBAACCAACADBCAD', 'Student_17': 'DBBCACDDCADCAABCADBABDDAD', 'Student_18': 'dcbcdcdbbddccabbdacacccbd', 'Student_19': 'dbbccbddcadaaaccbdcaaacad', 'Student_20': 'abbdaaddcadcaaccbdcaaccbd', 'Student_21': 'DCDCABDBCADAAACDCCDAACAAD', 'Student_22': 'dabdaddabddbaacdacbaaaaad', 'Student_23': 'BCBCDDDACCDCAABDDABACACAD', 'Student_24': 'ACBDCBDBBCDAACCCCBDAADCBD', 'Student_25': 'DCBCACDAADDCADCBAABACBCAD', 'Student_26': 'dcbaabdccadcdadcccbaabdbd', 'Student_27': 'abbadbddcadacbcacccacbdad'}

并将所有学生的第一个字母存储为字典条目,然后对下一个字母ect执行相同操作...以导致:

{'question_1': 'babbDaBdDcBDBDaADddaDdBADda', 'question_2': 'bcacCcCcDbDBCBcCBcbbCaCCCcb', 'question_3': 'bbbbBbBbBbBBBBbBBbbbDbBBBbb', 'question_4': 'ecccCeCcDdECCEeECccdCdCDCaa', 'question_5': 'acaaCcBcBaCCBCbBAdcaAaDCAad', 'question_6': 'dabbAcCbBcABCBbCCcbaBdDBCbb', 'question_7': 'ddddDdDdCdDDDDdDDdddDdDDDdd', 'question_8': 'adcdDdAdDaCCDAdDDbddBaABAcd', 'question_9': 'ccccCcBcDcACCCcCCbccCbCBAcc', 'question_10': 'daaaAaAaCaAAAAaAAdaaAdCCDaa', 'question_11': 'ddddDdDdCdDDDDdDDdddDdDDDdd', 'question_12': 'caccBbCaBcCCCAbBCcacAbCACca', 'question_13': 'daDdDaAaAbADAAaAAcaaAaAAAdc', 'question_14': 'dadaAaDbBaAAAAaAAaaaAaACDab', 'question_15': 'acbbCcCcCdABACcCBbccCcBCCdc', 'question_16': 'adccCcCbCbAACBcCCbccDdDCBca', 'question_17': 'aaccDaDcBaABCCcAAdbbCaDCAcc', 'question_18': 'ddddBbAaAbCCABbADaddCcABAcc', 'question_19': 'bbbbBbBcCaBBBAcCBcccDbBDBbc', 'question_20': 'acaaAaAaAaAAAAaAAaaaAaAAAaa', 'question_21': 'aaaaCcAbDbCACAdDBcaaAaCACac', 'question_22': 'bbddBdCbAcABABdBDcacCaADBbb', 'question_23': 'dcbcCcCcAaCCCCcCDcccAaCCCdd', 'question_24': 'aaabAaAaATAAABaAAbabAaABAba', 'question_25': 'ddddDdDdCaDDDDdDDdddDdDDDdd'}
 
x = 1
all_letters = ''
letter = ''
y = 1
i = 0
z = 0
for start in student_data_dict:
        student = student_data_dict.get('Student_' + str(y))
        letter = student[z]
        all_letters = all_letters + letter
        y = y + 1
        i = i + 1
        question_data_dict["question " + str(x)] = all_letters
        if i == 27:
            z = z + 1
            x = x + 1
            i = 0
print(question_data_dict)
data_file.close()

{'question 1': 'babbDaBdDcBDBDaADddaDdBADda'}

是我得到的,但我无法得到其他25个问题的答案。

我尝试将for start in student_data_dict:更改为while z<26:但是在#34;行=#student [z]&#34;我收到了错误&#34;&#39; NoneType&#39;对象不是可订阅的&#34;

3 个答案:

答案 0 :(得分:2)

num_questions = 25
answers_dict = {}
for i in range(num_questions):
    answers_dict['question' + str(i)] = ''.join(c[i] for c in student_data_dict.values())

print(answers_dict)

会给你想要的结果。

修改

固定代码。向变量提取的问题数量,以便可以用作索引

<强> EDIT2

我在原始字典中创建了一个OrderedDict,以便在迭代时保持答案顺序。现在answers_dict包含有效数据。

from collections import OrderedDict

ordered_data = OrderedDict()
for i in range(len(student_data_dict.items())):
    ordered_data['Student_' + str(i + 1)] = student_data_dict.get('Student_' + str(i + 1))

num_questions = 25
answers_dict = {}
for i in range(num_questions):
    answers_dict['question' + str(i + 1)] = ''.join(c[i] for c in ordered_data.values())

答案 1 :(得分:0)

当您转到下一个问题时,您需要重置y

答案 2 :(得分:0)

这是另一种通过Pandas获得所需内容的方法:

import pandas as pd

sdd = {k:[x for x in v] for k,v in student_data_dict}

df = pd.DataFrame(sdd)
df = df.reindex_axis(sorted(df.columns, 
                            key = lambda col: int(col.split("_")[-1])), axis=1)
df.index = [f"Question {i+1}" for i in df.index]

{k:''.join(v) for k,v in zip(df.index, df.values)}