python 嵌套列表理解和文本格式
python nested list comprehension and text formating
我在尝试格式化从字典中提取的数据时遇到一些困难,这些数据将用于撰写电子邮件。
我正在尝试使用列表理解来 a) 最小化发送到电子邮件函数的代码量和 b) 删除我的字典值的外括号并插入换行符;
代码:
test_dict = {'A': [['ap11', 'ct1', 'status a'],
['ap2', 'ct2', 'status b'],
['ap11', 'ct1', 'status a']],
'B': [['ap33', 'ct3', 'status b']]}
for k, v in test_dict.iteritems():
site_id = k
alert_header = str(['aname', 'cname', 'status'])
ap_list = [i for i in v]
# SendMail(site_id, alert_header, ap_list)
print(site_id)
print(alert_header)
print(ap_list)
输出:
A
['aname', 'cname', 'status']
[['ap11', 'ct1', 'status a'], ['ap2', 'ct2', 'status b'], ['ap11', 'ct1', 'status a']]
B
['aname', 'cname', 'status']
[['ap33', 'ct3', 'status b']]
期望的输出是一个字符串,由键、alert_header 和每个子列表的 str 表示组成,每行一个:
A
['name', 'cname', 'status']
['ap11', 'ct1', 'status a']
['ap2', 'ct2', 'status b']
['ap11', 'ct1', 'status a']
B
['name', 'cname', 'status']
['ap33', 'ct3', 'status b']
TIA
使用列表的字符串表示不是一个好主意,但如果确实需要这样做,请使用 for 循环来打印子列表:
for site_id, ap_list in test_dict.iteritems():
alert_header = ['aname', 'cname', 'status']
print(site_id)
print(alert_header)
for ap in ap_list:
print(ap)
要发送单个字符串:
test_dict = {'A': [['ap11', 'ct1', 'status a'],
['ap2', 'ct2', 'status b'],
['ap11', 'ct1', 'status a']],
'B': [['ap33', 'ct3', 'status b']]}
alert_header = str(['aname', 'cname', 'status'])
for site_id, v in test_dict.iteritems():
# call str on each sublist and separate by newlines.
data = "\n".join(map(str, v))
# concatenate all three stings into one.
to_send = site_id + "\n" + alert_header + "\n" + data
print(to_send)
输出:
A
['aname', 'cname', 'status']
['ap11', 'ct1', 'status a']
['ap2', 'ct2', 'status b']
['ap11', 'ct1', 'status a']
B
['aname', 'cname', 'status']
[['ap33', 'ct3', 'status b']]
我在尝试格式化从字典中提取的数据时遇到一些困难,这些数据将用于撰写电子邮件。 我正在尝试使用列表理解来 a) 最小化发送到电子邮件函数的代码量和 b) 删除我的字典值的外括号并插入换行符;
代码:
test_dict = {'A': [['ap11', 'ct1', 'status a'],
['ap2', 'ct2', 'status b'],
['ap11', 'ct1', 'status a']],
'B': [['ap33', 'ct3', 'status b']]}
for k, v in test_dict.iteritems():
site_id = k
alert_header = str(['aname', 'cname', 'status'])
ap_list = [i for i in v]
# SendMail(site_id, alert_header, ap_list)
print(site_id)
print(alert_header)
print(ap_list)
输出:
A
['aname', 'cname', 'status']
[['ap11', 'ct1', 'status a'], ['ap2', 'ct2', 'status b'], ['ap11', 'ct1', 'status a']]
B
['aname', 'cname', 'status']
[['ap33', 'ct3', 'status b']]
期望的输出是一个字符串,由键、alert_header 和每个子列表的 str 表示组成,每行一个:
A
['name', 'cname', 'status']
['ap11', 'ct1', 'status a']
['ap2', 'ct2', 'status b']
['ap11', 'ct1', 'status a']
B
['name', 'cname', 'status']
['ap33', 'ct3', 'status b']
TIA
使用列表的字符串表示不是一个好主意,但如果确实需要这样做,请使用 for 循环来打印子列表:
for site_id, ap_list in test_dict.iteritems():
alert_header = ['aname', 'cname', 'status']
print(site_id)
print(alert_header)
for ap in ap_list:
print(ap)
要发送单个字符串:
test_dict = {'A': [['ap11', 'ct1', 'status a'],
['ap2', 'ct2', 'status b'],
['ap11', 'ct1', 'status a']],
'B': [['ap33', 'ct3', 'status b']]}
alert_header = str(['aname', 'cname', 'status'])
for site_id, v in test_dict.iteritems():
# call str on each sublist and separate by newlines.
data = "\n".join(map(str, v))
# concatenate all three stings into one.
to_send = site_id + "\n" + alert_header + "\n" + data
print(to_send)
输出:
A
['aname', 'cname', 'status']
['ap11', 'ct1', 'status a']
['ap2', 'ct2', 'status b']
['ap11', 'ct1', 'status a']
B
['aname', 'cname', 'status']
[['ap33', 'ct3', 'status b']]