【问题标题】:sending data to two list items in python将数据发送到python中的两个列表项
【发布时间】:2019-04-18 17:54:26
【问题描述】:

Python 脚本:

msg = """
Device: Main1
ID: 1111
status: OK

Device: Main1
ID: 2222
Status: OK

Device: Main2
ID: 3333
status: OK

Device: Main2
ID: 4444
Status: OK
"""
main1_id = []
main2_id = []

for line in msg.split("\n"):
    if  line.startswith("ID:"):
        main1_id.append(line)
print main1_id
print main2_id

我有 msg 可变数据。如果设备分别是 Main1 和 Main2,我想将此数据的 id 添加到两个不同的列表 main1_idmain2_id。 我试图在上面的代码中实现这一点。我卡住了,我需要帮助。

输出:

['ID: 1111', 'ID: 2222', 'ID: 3333', 'ID: 4444']
[]

预期输出:

['ID: 1111', 'ID: 2222']
['ID: 3333', 'ID: 4444']

【问题讨论】:

  • 您永远不会在main2_id 上附加任何内容。为什么你期望它包含一些项目?
  • 你只需要id吗?
  • 只是想解释需求..我发布了这样的问题
  • @Kedar,是的,只有 ID

标签: python string python-2.7 dictionary defaultdict


【解决方案1】:

您可能需要一个默认字典和一个基本语法解析器来处理这个问题。我会使用正则表达式和集合来做一些类似的事情来节省自己的时间。如果文件语法不好,此代码也会发出错误,这是一件好事。

import collections 
ids = collections.defualtdict(list)
line_regex = r"(\w*): *(\w*)"

for line in input.split():

    if not line.strip(): 
        continue

    key, value = re.match(line_regex, line).groups()
    if key == 'Device':
        cur_device = value
    if key == 'ID' and cur_device is not None:
        ids[cur_device].append(value)
        cur_device = None
    if key == 'ID' and cur_device is None:
        raise SyntaxError('Could not parse input')

【讨论】:

    【解决方案2】:

    使用字典

    您应该尽量避免以这种方式创建可变数量的变量。这里可以使用collections.defaultdict

    from collections import defaultdict
    
    dd = defaultdict(list)
    L = msg.split('\n')
    
    for idx, line in enumerate(L):
        if line.startswith('Device'):
            dd[line.split(': ')[-1]].append(int(L[idx+1].split(': ')[-1]))
    

    结果:

    defaultdict(list, {'Main1': [1111, 2222],
                       'Main2': [3333, 4444]})
    

    然后通过dd['Main1']dd['Main2'] 访问您的列表。

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多