【问题标题】:How to parse item from list in python如何在python中从列表中解析项目
【发布时间】:2019-08-29 13:19:34
【问题描述】:

如何在 python 中解析列表中的项目?

我需要从以下位置获取 HOSTNAME: {'Key': 'Name', 'Value': 'HOSTNAME'}

tag = [{'Key': 'Backup Initiator Rule', 'Value': 'Daily-6d-retention'}, 
        {'Key': 'delete_On', 'Value': '2019-08-31'},
        {'Key': 'Backup_Type', 'Value': 'Demo'},
        {'Key': 'Name', 'Value': 'HOSTNAME'},
        {'Key': 'Disaster_Recovery', 'Value': 'Full'}]

【问题讨论】:

  • get tag["Tags"] 然后扫描列表以查找 Key == Name 的字典。首先使用ast.literal_eval,因为它似乎是一个字符串
  • 这似乎是一个写入字符串的 python 字典。为什么?你能改变吗?
  • 但是这个字符串包含一个“datetime.datetime”调用...'StartTime': datetime.datetime(2019, 8, 28, 13, 56, 8, 269000, tzinfo=tzutc()),
  • 我希望这不是日期时间对象的字符串表示形式的调用
  • 变量标签的类型是类'list'

标签: python parsing arraylist


【解决方案1】:

尝试列表比较

tag = "[{'Key': 'Backup Initiator Rule', 'Value': 'Daily-6d-retention'}, {'Key': 'delete_On', 'Value': '2019-08-31'},{'Key': 'Backup_Type', 'Value': 'Demo'},{'Key': 'Name', 'Value': 'HOSTNAME'},{'Key': 'Disaster_Recovery', 'Value': 'Full'}]"

print([dic['Value'] for dic in eval(tag) if dic['Key']=='Name'])

结果:['HOSTNAME']

【讨论】:

  • 如果变量'tag'的类型是class 'list'怎么办
  • tag = [{'Key': 'Backup Initiator Rule', 'Value': 'Daily-6d-retention'}, {'Key': 'delete_On', 'Value': '2019-08-31'},{'Key': 'Backup_Type', 'Value': 'Demo'},{'Key': 'Name', 'Value': 'HOSTNAME'},{'Key': 'Disaster_Recovery', 'Value': 'Full'}]
  • 只需将“eval(tag)”改为tag即可。
【解决方案2】:

正则表达式

由于这是不可解析的 json,我会选择正则表达式:

import re
re.findall("{'Key': 'Name', 'Value': '(.*?)'}", tag)

这将返回找到的所有对象的列表:

['HOSTNAME']

Edit OP 更改了 tag 字符串,现在这可能不是最好的选择。

【讨论】:

    【解决方案3】:
    for dict in tag:
        if dict['Key'] == 'Name':
            hostname = dict['Value']
            break
    

    【讨论】:

    • 我的意思是列表<class 'list'>
    猜你喜欢
    • 2011-11-08
    • 2013-07-04
    • 2023-01-24
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多