在for循环中打印带有“键:值”对的字典

7
我希望能遍历字典spam,并以"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

可能是如何打印字典的键?的重复问题。 - Andreas detests censorship
7个回答

25

你应该使用 dict.items,因为 dict.keys 只会迭代键,然后你又在打印 dict.values(),它会返回字典中所有的值。

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

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

4

dict.values() 返回字典中所有值的列表。为什么不使用键查找呢?

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

甚至更好的是:
for k, v in spam.items():
    print('{}: {}'.format(k, v))

1
str(spam.values()) 改为 spam[k]。第一个选项会返回字典中所有的值,而第二个选项只返回当前键 k 对应的值。

无需将其转换为字符串 - brianpck

1

请尝试以下代码:

s={'name': 'you', 'number': 123, 'password': '555', 'amt': 800}


for i in s:
    print(i,"=>" ,s[i])

欢迎来到 Stack Overflow。请查看如何撰写优秀答案的文章。答案应该被适当地格式化,对于您的情况,可以使用代码块。此外,代码是可以的,但是添加上下文(背后的原因)比仅有代码更有用。 - James Mchugh

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]),你可以获取与字典'spam'中键'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]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接