将数据发送到 python 中的两个列表项
sending data to two list items in python
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
我有味精变量数据。如果设备分别是 Main1 和 Main2,我想将此数据的 ID 添加到两个不同的列表 main1_id
和 main2_id
。
我试图在上面的代码中实现这一点。我卡住了,我需要帮助。
输出:
['ID: 1111', 'ID: 2222', 'ID: 3333', 'ID: 4444']
[]
预期输出:
['ID: 1111', 'ID: 2222']
['ID: 3333', 'ID: 4444']
使用字典
您应该尽量避免以这种方式创建可变数量的变量。这里可以使用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']
访问您的列表。
您可能需要一个 defualtdict 和一个基本的语法分析器来处理这个问题。我使用正则表达式和集合来做一些类似的事情来节省我自己的时间。如果文件语法错误,此代码也会发出错误,这是一件好事。
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')
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
我有味精变量数据。如果设备分别是 Main1 和 Main2,我想将此数据的 ID 添加到两个不同的列表 main1_id
和 main2_id
。
我试图在上面的代码中实现这一点。我卡住了,我需要帮助。
输出:
['ID: 1111', 'ID: 2222', 'ID: 3333', 'ID: 4444']
[]
预期输出:
['ID: 1111', 'ID: 2222']
['ID: 3333', 'ID: 4444']
使用字典
您应该尽量避免以这种方式创建可变数量的变量。这里可以使用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']
访问您的列表。
您可能需要一个 defualtdict 和一个基本的语法分析器来处理这个问题。我使用正则表达式和集合来做一些类似的事情来节省我自己的时间。如果文件语法错误,此代码也会发出错误,这是一件好事。
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')