我正在尝试制作一个字典,为不同的键返回相同的值,目前我有这样的字典:

GScale = {
    ('S1') : 'gN',
    ('S2') : 'aN',
    ('S3') : 'bN',
    ('N1','G1','A2','B2') : 'gG',
    ('N2','G2','A1','B3','C2') : 'aA',
    ('N3','G3','A3','B1','C3','D2') : 'bB',
    ('N4','A4','B4','C1','D3','E2') : 'cC',
    ('N5','B5','C4','D1','E3','F2') : 'dD',
    ('N6','C5','D4','E1','F3') : 'eE',
    ('N7','D5','E4','F1') : 'fF'
}


当我要求GScale['S1']时,我成功得到'gN',但是当我要求GScale['N1']时,我得到了一个关键错误,可能是什么问题?

最佳答案

您的字典有2种键:


("S1")这样的字符串(括号在这里不构成元组,可能是造成混乱的原因)
("N1",...)这样的元组


因此仅使用N1来查询字典是行不通的,因为N1不是键,它是某些键元组的一部分。

为了方便起见,如果您想这样编写代码,建议您以后在字典理解中重新编写它:

GScale = {
    ('S1',) : 'gN',   # trailing comma is needed now
    ('S2',) : 'aN',
    ('S3',) : 'bN',
    ('N1','G1','A2','B2') : 'gG',
    ('N2','G2','A1','B3','C2') : 'aA',
    ('N3','G3','A3','B1','C3','D2') : 'bB',
    ('N4','A4','B4','C1','D3','E2') : 'cC',
    ('N5','B5','C4','D1','E3','F2') : 'dD',
    ('N6','C5','D4','E1','F3') : 'eE',
    ('N7','D5','E4','F1') : 'fF'
}

GScale = {k:v for kl,v in GScale.items() for k in kl}


现在GScale是:


  {'N1':'gG','B5':'dD','D4':'eE','C3':'bB','A3':'bB','S3':'bN',' F3':'eE','C4':'dD','E3':'dD','D1':'dD','A4':'cC','E2':'cC','G2' :'aA','C5':'eE','A2':'gG','N2':'aA','E4':'fF','E1':'eE','D5':' fF”,“ N6”:“ eE”,“ N7”:“ fF”,“ B1”:“ bB”,“ A1”:“ aA”,“ C1”:“ cC”,“ F2”:“ dD” ,'B3':'aA','G3':'bB','F1':'fF','D3':'cC','B2':'gG','B4':'cC',' G1':'gG','S1':'gN','C2':'aA','N5':'dD','S2':'aN','N3':'bB','D2' :'bB','N4':'cC'}


现在,键/值对被扩展并查询任何N1或字母+数字作品。

(请注意,单值键添加了逗号以使其成为1个元素的元组,因此在字典理解中对键元组进行的迭代工作(不添加逗号将使其看起来有效,但它将创建带有单个字母的键) S1S2 ...:不是您想要的)

关于python - 在字典中使用多个键到相同值的键错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47253892/

10-12 12:57
查看更多