如何使用join()输出?

时间:2019-02-06 10:36:40

标签: python-3.x ansible

我想用join()输出字符串。 我怎么用呢?

这是我的代码。

data_list = [{'A': 'a', 'B': 'b', 'C': 'c'}, {'A': 'a', 'B': 'b', 'C': 'c'}]

A_list = set()
for data in data_list:
    A = data['A']
    A_list.add(A)


for A in A_list:
    B_list = []
    C_list = []
    for data in data_list:
        if data['A'] == A:
            B = data['B']
            C = data['C']
            B_list.append(B)
            C_list.append(C)



    print('\n[{}]'.format(A))
    print('' + '\n' .join(B_list) + ' host=' + ' '.join(C_list))

这是它的输出。

[a]
b
b host=c c

[a]
b
b host=c c

但是我想得到如下结果。

[a]
b host=c
b host=c 

[A]
b host=c
b host=c 

我想,如果我创建的“主机”列表与“ B”一样多,那么我可以使用join()插入“主机”,但实际数据远不止上述数据,而且我不确定在其中有多少变量这些字典。

有什么想法吗?

此外,此输出将在ansible库存文件中使用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

为什么需要加入?您不能使用的提示:

print(B_list[0]+' host='+C_list[0])

这将输出:

b host=c

不是您所要求的b和c大写字母,但可以通过修改原始的B_listC_list来实现。


提取多行:

for x in range(len(B_list)):
    print(B_list[x]+' host='+C_list[x])

答案 1 :(得分:1)

如果打印repr中的'' + '\n' .join(B_list) + ' host=' + ' '.join(C_list)而不是直接打印,则可能会更清楚。你得到

'b\nb host=c c'

因此,这是将B_list的两个元素与它们之间的"\n"连接起来,然后插入" host=",然后将C_list的两个元素与{它们之间的{1}}。打印时," "变成换行符,您可以看到所得到的输出。

要获得所需的输出,您需要匹配B和C的。您可以使用tuples

"\n"

有更简洁的方法可以编写更少的循环,例如使用list comprehensions,但这可以使您更接近解决方案。