2017-04-13 64 views
0

我想遍历字典spam,并以"key: value"的格式打印结果。我的代码出现了错误,导致了不同的结果。在for循环中使用“key:value”对打印字典

有什么方法纠正输出吗?为什么我得到这个输出?

spam = {'color': 'red', 'age': '42', 'planet of origin': 'mars'} 

for k in spam.keys(): 
    print(str(k) + ': ' + str(spam.values())) 

结果中得到:

color: dict_values(['red', '42', 'mars']) 
age: dict_values(['red', '42', 'mars']) 
planet of origin: dict_values(['red', '42', 'mars']) 

预期的结果:

color: red 
age: 42 
planet of origin: mars 

回答

10

而应该使用dict.items代替,因为dict.keys只能通过钥匙迭代,然后你打印dict.values()它返回dict的所有值。

spam = {'color': 'red', 'age': '42','planet of origin': 'mars'} 

for k,v in spam.items(): 
    print(str(k)+': ' + str(v)) 
1

变化str(spam.values())spam[k]。第一个选项提供字典中的所有值,第二个选项产生属于当前键k的值。

+0

无需转换为字符串 – brianpck

2

dict.values()返回字典中所有值的列表。为什么不做一个关键的查找?

for k in spam.keys(): 
    print(str(k)+': ' + spam[k]) 

甚至更​​好:

for k, v in spam.items(): 
    print('{}: {}'.format(k, v)) 
1

你可以这样做:

spam = {'color': 'red', 'age': '42','planet of origin': 'mars'} 


for k in spam.keys(): 

    print(k+ ":" +spam[k]) 
1

你试试?

for k in spam: 
    print(str(k)+':'+str(spam[k])) 
-1

做为mathias711建议你! 实际上你的代码用str(spam.values())做的是写出字典的所有值。 通过执行str(spam[k]),您将得到与字典“垃圾邮件”中的键'k'相关联的值。 如果你真的想要以某种顺序输出,你应该有一个列表,按照这个顺序排序所有的键,因为默认的键盘没有排序。

这是你的代码看起来是这样的:

spam = {'color': 'red', 'age': '42','planet of origin': 'mars'} 

liste_ordered_for_output['color', 'age', 'planet of origin'] 


for key in liste_ordered_for_output: 
    print(str(key)+': ' + str(spam[key])) 
+0

可以对一些解释为什么downvote? –