我想用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库存文件中使用。
感谢您的帮助!
答案 0 :(得分:2)
为什么需要加入?您不能使用的提示:
print(B_list[0]+' host='+C_list[0])
这将输出:
b host=c
不是您所要求的b和c大写字母,但可以通过修改原始的B_list
和C_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,但这可以使您更接近解决方案。