代码之家  ›  专栏  ›  技术社区  ›  mpx

在python dict中访问多个值

  •  1
  • mpx  · 技术社区  · 6 年前

    GroupClass (例如。, Class1 , Class2 Class3 ).

    例如,下面的代码应该给出 A1 B1 C1

    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)
    

    但是,当dict中分配了多个元素时,代码就会失败。

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

    通过如上所述更改GroupClass,var picks和label应该产生

    = 6,2,3,4 标签

    我哪里出错了?

    3 回复  |  直到 6 年前
        1
  •  1
  •   cdarke    6 年前

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

    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
  •  2
  •   BlackBeard    6 年前

    那是因为当你 (channels.index(ch_pick.upper())) 预计 ch_pick 是字符串。在这种情况下,它是一个 tuple .

    正如错误信息所示 AttributeError: 'tuple' object has no attribute 'upper' .

    元组 通过这样做:

    if type(ch_pick) is tuple:
       // pick an element then append    
    else:          
       picks.append(channels.index(ch_pick.upper()))
    
        3
  •  1
  •   Etienne Herlaut    6 年前

    “tuple”对象没有属性“map”

    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)