subjects = {
    0:9,'fail': 0,
   9:14, 'pass': 25,
   15:17, 'merit': 40,
    18:20,'Distinction': 50
}

我希望以上字典包含3个维度。用户输入将在初始数字之间。根据用户输入的数字,将显示以下消息。例如。 4是失败,值(value)0分,10是失败,值(value)25分,依此类推。
inputs = ['irish','english','french','italian','dutch','german']
for i in range(1, 7):
    inputs.append(raw_input('Enter mark for {}: '.format(i)))

我希望循环询问爱尔兰人等的输入标记
print sum(subjects[name][value] for name in inputs)

能做到吗?

最佳答案

字典根据键的哈希值存储其值。

这意味着字典查找仅返回其键完全匹配查找中使用的键的条目。

您不能将键设置为“3到5范围内的任何数字”,并且希望查找到“4”能被击中。

但是,您可以做的是重复字典条目:

subject_ranges = [(0, 8, 'fail', 0),
                  (9, 14, 'pass', 25),
                  (15, 17, 'merit', 40),
                  (18, 20, 'Distinction', 50)]
subjects = {}
for low, high, descr, points in subject_ranges:
   for score in range(low, high+1):
      subjects[score] = {'description': descr, 'value': points}

并收集如下输入:
input_names = ['irish','english','french','italian','dutch','german']
scores = []
for i in range(len(input_names)):
    scores.append(int(raw_input('Enter mark for %s: ' % input_names[i])))

现在,此代码将可以按您希望的方式打印总分:
print sum(subjects[score]['value'] for score in scores)

这是,而不是,是“3维字典”,也不是类似的东西。这是一个字典,其键是整数,值是两个元素的字典(如果需要,可以使用NamedTuple)。但是从您的问题来看,似乎您实际上并不需要比这更复杂的东西。

关于python - 3维词典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14224067/

10-12 18:12