在Python字典中访问多个值

时间:2018-10-08 13:56:59

标签: python dictionary

我的程序应在通道中注册元素的位置。每个元素都有一个不同的GroupClass(例如Class1Class2Class3)。

例如,以下代码应将A1B1C1的位置分别指定为6、3和4:

GroupClass = {'Class1': 'A1', 'Class2': 'B1', 'Class3': 'C1'}
channels = ['E1', 'g', 'A2', 'B1', 'C1', 'A3', 'A1']

labels = []
picks = []
for ch in GroupClass:
    if not GroupClass[ch]: continue
    ch_pick = GroupClass[ch]  # Investigate this                                                                              filename, channels))
    picks.append(channels.index(ch_pick.upper()))
    labels.append(ch)

print(picks)
print(labels)

但是,当在字典中分配了多个元素时,代码将失败。 例如,以下内容将给出错误:

GroupClass = {'Class1': ('A1', 'A2'), 'Class2': 'B1', 'Class3': 'C1'}

通过如上所述更改GroupClass,应生成var picks和标签

= 6,2,3,4 标签 = {'Class1':'A1','Class2':'B1','Class3':'C1'}

我要去哪里错了?

3 个答案:

答案 0 :(得分:2)

这是因为,当您执行(channels.index(ch_pick.upper()))时,期望ch_pick是一个字符串。在这种情况下,它是tuple

并且错误消息提示 AttributeError: 'tuple' object has no attribute 'upper'

您可以执行以下操作来选择数据类型为tuple的元素(第一/第二等):

if type(ch_pick) is tuple:
   // pick an element then append    
else:          
   picks.append(channels.index(ch_pick.upper()))

答案 1 :(得分:1)

我建议您检查对象的类并在列表中使用多个条目:

GroupClass = {'Class1': ('A1','A2'), 'Class2': 'B1', 'Class3': 'C1'}
channels= ['E1', 'g', 'A2', 'B1', 'C1', 'A3', 'A1']

labels=[]
picks = []
for ch in GroupClass:
    if not GroupClass[ch]: continue
    ch_pick = GroupClass[ch]  # Investigate this

    if isinstance(ch_pick, tuple):
        for i in ch_pick:
            picks.append(channels.index(i.upper()))
    else:
        picks.append(channels.index(ch_pick.upper()))

    labels.append(ch)

print(picks)
print(labels)

礼物:

[6, 2, 3, 4]
['Class1', 'Class2', 'Class3']

答案 2 :(得分:1)

错误很明显:

  

“元组”对象没有属性“地图”

我的回答:

for ch in GroupClass:
    if not GroupClass[ch]: continue
    ch_pick = GroupClass[ch]  # Investigate this filename, channels))
    if isinstance(ch_pick, tuple):picks.append([channels.index(x.upper())  for x in ch_pick])
    else : picks.append(channels.index(ch_pick.upper()))
    labels.append(ch)