2017-01-10 115 views
0

我有一本字典,如:Python的方式字典其项目转换为字符串

a = { "Linux": "Linus Torvalds", 
     "Microsoft": "Bill Gates", 
     "Apple": "Steve Jobs"} 

我想字符串化这个字典是这样的:

Linux : Linus Torvalds 
Microsoft: Bill Gates 
Apple : Steve Jobs 

这样做操作,我有以下代码:

data = "" 
for product, lead in a.items(): 
    data += product + ": " + lead + "\n" 

此代码产生以下结果:

print(data) 
Linux: Linus Torvalds 
Microsoft: Bill Gates 
Apple: Steve Jobs 

我想要更多的Pythonic方法来执行此操作,因为我认为我的代码更多的是解决此问题的过程方法(初始化和操作)。此外,正确格式化data的任何提示都不会错。

+1

为什么要在此处创建字符串以进行可视化?我无法想象这是一个好主意的案例 –

+0

@Chris_Rands是的。我想打印数据。 –

+0

只需迭代,然后在'a.items():print(k,v)'中输入k,v或者你可以使用'pprint',但这可能是过量的 –

回答

4

如果你想获得他们的格式就像你有

print('\n'.join(['{:<9}: {}'.format(k, v) for k, v in a.items()])) 

打印

Apple : Steve Jobs 
Linux : Linus Torvalds 
Microsoft: Bill Gates 
+2

你也可以使用星号格式: '.format(* pair)for a.items()'中的对。我喜欢这种方法更好地控制它允许的行格式。 –

+0

感谢您的解决方案和@Kounis的建议。 –

+0

@ Ev.Kounis显式比隐式更好。它有助于记录在这种情况下哪个是哪个。 –

3

您可以使用嵌套的str.join操作。

print('\n'.join(': '.join(item) for item in a.items())) 
# Linux: Linus Torvalds 
# Microsoft: Bill Gates 
# Apple: Steve Jobs 

这将创建一个包含': '分开键和值,然后用“\n”将它们连接在一起的发电机。

+0

感谢你的解决方案 –

1

首先转换dict一个迭代与map,然后使用join加入的元素:

work_person = map(lambda x: x[0]+': '+x[1], a.items())  
res = '\n'.join(work_person) 
1

我会加上Patrick的回答检查最长的密钥长度以填充密钥:

max_length = max(len(k) for k in a) 
print('\n'.join(['{:<{}}: {}'.format(k, max_length, v) for k, v in a.items()]))