Python字典 - 无法在字符串后搜索太阳字符串的字典

用户10918383

这是我在下面发布的代码中的segments = body.split('\r\n')变量(我刚刚从中删除了\r\n段):

['', 'Application name: dummy.service', 'Source: host2', 'Timestamp: 2019-01-23T22:00:01.026Z', 'Message: LivePnL:in live pricing', '', '', 'Application name: dummy.service', 'Source: host2', 'Timestamp: 2019-01-23T22:00:01.016Z', 'Message: Risk request failed', '', '', 'Application name: dummy.service', 'Source: host2', 'Timestamp: 2019-01-23T22:00:00.994Z', 'Message: Risk request failed', '', '', 'Application name: dummy.service', 'Source: host2', 'Timestamp: 2019-01-23T22:00:00.956Z', 'Message: Risk request failed', '', '', 'Application name: dummy.service', 'Source: host2', 'Timestamp: 2019-01-23T22:00:00.927Z', 'Message: Risk request failed', '', '', '', 'For instructions please see: https://protect-eu.mimecast.com/s/2_5sC864NHV0NWin7Cr2?domain=wiki', '']

我想在应用程序名称、来源和消息之后获取值

期望的输出:

虚拟服务

主机2

LivePnL:实时定价

虚拟服务

主机2

风险请求失败

虚拟服务

主机2

风险请求失败

我尝试了以下代码:

if mail["Subject"].find("Alert for  dummy.service prod errors") > 0 :
       body = get_autosys_body(mail)
    for line in body.splitlines():
          if 'Application name' in line:
            
             info = {}
             # removes \r\n - put all output to single line
             segments = body.split('\r\n')
             for i in range(2, len(segments)):

               key = ''
               if segments[i] == 'Application name:':
                 key = 'alarm'

               elif segments[i] == 'Source:':
                 key = 'job'
               elif segments[i] == 'Message:':
                 key = 'machine'
               if key != '':
                 i += 1
               info[key] = segments[i]

    print (info['alarm'])

我得到了所有的组合键: info['alarm'], info['job'], info['machine']

实际产量

打印(信息['来源'])

关键错误:'来源'

尼维斯

几个问题。首先,如果您正在尝试创建查找表,则可以使用字典。但是,您的密钥必须是唯一的,而您的则不是。您将覆盖单个字典中的值。

让我们专注于将数据转换为键值对结构来开始。你的钥匙只限于(只要我可以告诉)alarmjobmachine由于您的密钥与数据结构中的内容不匹配,您可能必须对其进行硬编码。我们将使用您提供的数据结构作为起点:

things = ['', 'Application name: dummy', 'Source: HOST2', 'Timestamp: 2019-01-23T22:00:01.026Z', 'Message: LivePnL:in live pricing', '', '', 'Application name: dummy', 'Source: HOST2', 'Timestamp: 2019-01-23T22:00:01.016Z', 'Message: Risk request failed', '', '', 'Application name: dummy', 'Source: HOST2', 'Timestamp: 2019-01-23T22:00:00.994Z', 'Message: Risk request failed', '', '', 'Application name: dummy', 'Source: HOST2', 'Timestamp: 2019-01-23T22:00:00.956Z', 'Message: Risk request failed', '', '', 'Application name: dummy', 'Source: HOST2', 'Timestamp: 2019-01-23T22:00:00.927Z', 'Message: Risk request failed', '', '', '']

apps, source, messages = [], [], []

# I want to iterate over each element in things
for element in things:

    # Now, each element has one of two possibilities, an empty string or key-value
    # I will skip the empties like so
    if not element:
        continue

    # Now I will split on ': ' since I don't want a leading space in values
    k, v = element.split(': ')

    # And we match on the keys here
    if k=='Application name':
         apps.append(v)
    elif k=='Source':
         sources.append(v)
    elif k=='Message':
         messages.append(v)
    else:
         print(k)

这将所有值放入关联列表中,我们可以将它们zip放在一起以便于迭代。

apps
# ['dummy', 'dummy', 'dummy', 'dummy', 'dummy']
sources
# ['HOST2', 'HOST2', 'HOST2', 'HOST2', 'HOST2']
messages
# ['LivePnL:in live pricing', 'Risk request failed', 'Risk request failed', 'Risk request failed', 'Risk request failed']

现在构建您的数据结构(这里是文档zip

lookups = []

# zip is putting the lists side-by-side so to speak for easy iteration
for app, src, msg in zip(apps, sources, messages):
    lookups.append({'alarm': app,
                    'job': src,
                    'machine': msg})

您生成的数据结构如下所示:

[{'alarm': 'dummy', 'job': 'HOST2', 'machine': 'LivePnL:in live pricing'}, {'alarm': 'dummy', 'job': 'HOST2', 'machine': 'Risk request failed'}, {'alarm': 'dummy', 'job': 'HOST2', 'machine': 'Risk request failed'}, {'alarm': 'dummy', 'job': 'HOST2', 'machine': 'Risk request failed'}, {'alarm': 'dummy', 'job': 'HOST2', 'machine': 'Risk request failed'}]

lookup现在的每个条目都是一个dictionary带有警报、作业和机器的键。您可以get像这样迭代每个值:

for entry in lookup:
    print('alarm: %s'%entry.get('alarm'))
    ... # continue for other keys

注意我使用的是get方法而不是entry['alarm'],这是一个更健壮的查找,避免KeyErrors并返回默认值(None如果未指定)。

肯定有更快、更简洁的方法来做到这一点,但我认为这足以让事情看起来很熟悉,而不是让你陷入新的概念

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python字典字符串

来自分类Dev

Python 3-基于字符串的字典搜索列表

来自分类Dev

Python字典搜索未找到给定字符串的结果

来自分类Dev

无法用字符串下标字典

来自分类Dev

Python将字典视为字符串

来自分类Dev

Python字典到字符串

来自分类Dev

Python中的字符串和字典

来自分类Dev

多级字典的Python字符串格式

来自分类Dev

python字符串到字典

来自分类Dev

Python字典,键和字符串

来自分类Dev

Python:从包含 python 字典/元组的字符串创建字典

来自分类Dev

字典到字符串

来自分类Dev

字典<字符串,城市>

来自分类Dev

拼合字符串和字典的字典

来自分类Dev

在Swift中搜索字符串数组的字典

来自分类Dev

在字典数组中搜索字符串数组

来自分类Dev

使用字符串而不是对象搜索字典键

来自分类Dev

用子字符串搜索目标书的字典值

来自分类Dev

在Swift中搜索字符串数组的字典

来自分类Dev

在字典列表中的列表中搜索字符串

来自分类Dev

字典<字符串,字符串>值查找性能

来自分类Dev

输入空字符串后如何追加字典

来自分类Dev

Python字符串:如何查询列表中的字典,这些字典在字典中

来自分类Dev

无法将字符串附加到字典键

来自分类Dev

无法成功读取字典值中的字符串?

来自分类Dev

无法将字符串附加到字典键

来自分类Dev

无法将列表或字符串转换为字典

来自分类Dev

无法用字典中的新值替换字符串

来自分类Dev

带有优先级的字符串中的Python搜索字典键