得到错误“列表索引必须是整数,而不是str”

时间:2016-02-08 22:33:54

标签: python python-2.7

好的,所以代码是

    Pdmg = (lambda x: (round(x*0.75), round(x*1.0)))(['stats']['PStrength'])
    Mdmg = (lambda x: (round(x*0.75), round(x*1.0)))(['stats'['PDexterity'])
    HP = 4 * ['lvl'] * ['stats']['PVitality']
    Mage = {'name' : 'Mage',
    'Class' : 'Player',
    'Sub-Class' : 'Mage',
    'lvl' : 1,
    'xp' : 26,
    'lvlNext' : 25,
    'Weak' : {'Lightning'},
    'Normal' : {'Shock'
                'Burn'
                'Water'
                'Freeze'},
    'Resistance' : {'Ice'
                    'Fire'},
    'Null' : {'Poison'},
    'stats': {'PStrength' : 5,
            'PProsperity' : 5,
            'PDexterity' : 15,
            'PVitality' : 5,
            'PAgility' : 10,
            'hp' : 'HP',
            'MP' : 50}}

我收到错误“列表索引必须是整数,而不是str”我该如何解决这个问题? (另外我已经阅读了一些有这样问题的帖子,他们真的没有帮助我,所以请不要把我发给另一篇帖子。)

2 个答案:

答案 0 :(得分:2)

这是你的问题:

['stats']['PVitality']

这相当于以下内容:

my_list = [
    'stats'
]
my_list['PVitality']

在编辑之前很难告诉你如何解决这个问题,但现在我看到了你正在使用的数据结构。

你想要这样的东西:

Mage['stats']['PStrength']

虽然在使用之前必须先定义Mage

次要说明

惯用Python不会在这里使用lambda,因为所有lambda正在做的是避免临时变量泄漏到封闭范围内。更惯用的是:

x = Mage['stats']['PStrength']
Pdmg = round(x*0.75), round(x*1.0)

或类似的东西:

def stat_damage(stat):
    """Calculate damage (foo, bar) from stat value."""
    return round(x*0.75), round(x*.10)

然而,代码风格是一种品味问题,lambda在这里可以正常运行。这对其他Python程序员来说只是一个惊喜。

答案 1 :(得分:0)

嗯,显而易见的答案是退出使用字符串作为列表索引。如果 stats,PStrength 及其同源词是变量,只需删除引号即可。

您还必须提供您要索引的列表的名称。

您最近的修改是一个很大的改进。这有两个至关重要的致命问题:

  1. 您的代码尝试在字典初始化之前将其从字典中删除。
  2. 您没有在参考文献中提供字典名称。
  3. 修复这些......

               // Establish XenCenter session
                session = new Session(HostName, 80);
    
                // Authenticate with username and password. The third parameter tells the server which API version we support.
                session.login_with_password(XenUserName, XenPassword, API_Version.API_1_3);
    
                List<XenRef<Host>> pools = Host.get_all(session);
    
                foreach (XenRef<Host> pool in pools)
                {
                // Get all records associated with this specific VM server
                    Host host = Host.get_record(session, pool);
    
               // Get all records associated with this specific VM server resources.
                    List<XenRef<VM>> residentVms = host.resident_VMs;
              foreach (var vm in residentVms)
               {
                VM vmRecord = VM.get_record(session, vm);      
    
               }
    

    输出:

    Mage = {'name' : 'Mage',
            'Class' : 'Player',
            'Sub-Class' : 'Mage',
            'lvl' : 1,
            'xp' : 26,
            'lvlNext' : 25,
            'Weak' : {'Lightning'},
            'Normal' : {'Shock'
                        'Burn'
                        'Water'
                        'Freeze'},
            'Resistance' : {'Ice'
                            'Fire'},
            'Null' : {'Poison'},
            'stats': {'PStrength' : 5,
                      'PProsperity' : 5,
                      'PDexterity' : 15,
                      'PVitality' : 5,
                      'PAgility' : 10,
                      'hp' : 'HP',
                      'MP' : 50}}
    
    Pdmg = (lambda x: (round(x*0.75), round(x*1.0)))(Mage['stats']['PStrength'])
    Mdmg = (lambda x: (round(x*0.75), round(x*1.0)))(Mage['stats']['PDexterity'])
    HP = 4 * Mage['lvl'] * Mage['stats']['PVitality']
    
    print Pdmg, Mdmg, HP
    

    我还修复了 Mdmg 行中缺少的左括号。