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']]