【问题标题】:Extracting a determined value from a list从列表中提取确定的值
【发布时间】:2018-02-21 10:32:13
【问题描述】:

我有一个列表,我想从中提取一个对应于 totalsec 的数字。我继续使用 split 方法来构成列表列表,然后提取 totalsec 但我收到错误“列表没有属性拆分”。

这是我的列表:['nbresets:0,totalsec:14,lossevtec:0,lossevt:0,sevlossec:0,sevloss:0,paclosevtec:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0,paclosevt:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0,dellosevtec:0:0:0:0:0:0:0:0:0:0:0,dellosevt:0:0:0:0:0:0:0:0:0:0:0,dursevlossec:0:0:0:0:0:0:0:0:0:0:0:0,dursevloss:0:0:0:0:0:0:0:0:0:0:0:0,nbfailures:0,notif:2'] 我想从这个列表中提取的数字是 14。

如果您有任何想法如何做到这一点,请帮忙!

【问题讨论】:

  • 您的代码在哪里,包括导致错误的行?

标签: python split


【解决方案1】:

不能直接对列表进行拆分,只能对字符串进行拆分(因为列表已经拆分)。所以遍历你的字符串列表并拆分它们。

我将缩短代码以使其更具可读性,只需将其替换为您的列表即可。

strings = ['nbresets:0,totalsec:14,lossevtec:0,lossevt:0']
for s in strings:
    # first split by comma to get the single entries
    for line in s.split(','):
        params = line.split(':')
        if params[0] == 'totalsec':
            print(params[1]) # this should return 14

【讨论】:

    【解决方案2】:

    为什么使用列表作为容器?您的列表只有一个条目(“ ”之间的所有内容)。而且您只能在字符串上使用 split 。 只需将字符串拆分为列表即可。然后遍历列表并通过再次拆分提取键/值对:

    myString = 'nbresets:0,totalsec:14,lossevtec:0,lossevt:0,sevlossec:0,sevloss:0,paclosevtec:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0,paclosevt:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0,dellosevtec:0:0:0:0:0:0:0:0:0:0:0,dellosevt:0:0:0:0:0:0:0:0:0:0:0,dursevlossec:0:0:0:0:0:0:0:0:0:0:0:0,dursevloss:0:0:0:0:0:0:0:0:0:0:0:0,nbfailures:0,notif:2'
    result = {}
    for item in myString.split(","):
        key, value = item.split(':', 1)
        result[key] = value
    
    print(result['totalsec'])
    

    【讨论】:

      【解决方案3】:
      import re
      
      my_lst = ['nbresets:0,totalsec:14,lossevtec:0,lossevt:0,sevlossec:0,sevloss:0,paclosevtec:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0,paclosevt:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0,dellosevtec:0:0:0:0:0:0:0:0:0:0:0,dellosevt:0:0:0:0:0:0:0:0:0:0:0,dursevlossec:0:0:0:0:0:0:0:0:0:0:0:0,dursevloss:0:0:0:0:0:0:0:0:0:0:0:0,nbfailures:0,notif:2']
      
      
      print re.findall(pattern="totalsec:(\d+)", string=my_lst[0])[0]
      

      输出:

      14
      

      【讨论】:

      • 输出给我:totalsec:14。但它也给了我这个错误:
      • AttributeError Traceback (最近一次调用最后) in () 17 print(liste_evt_contenu) 18 ---> 19 print (liste_evt_contenu[0].split (",")[1]).split(":")[1] 20 21 AttributeError: 'NoneType' 对象没有属性 'split'
      • @arijdaif 尝试更新代码你也可以更新你的代码
      • 谢谢@Mahesh Karia,我更新了代码,但它给了我“无效的语法”。我已经尝试过 Leon 先生的代码,它对我有用。
      【解决方案4】:

      你也可以试试这个:-

      for i in a:  #a is your list of data here
          gen = i.split(",")
          result = [x for x in gen if x.startswith('totalsec')] #which can be dynamic
          for st in result:
              name,value = st.split(":")
              print(value)
      

      【讨论】:

        猜你喜欢
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多