【问题标题】:Dictionary Output Issue字典输出问题
【发布时间】:2017-03-05 15:36:57
【问题描述】:

我试图更好地理解下面的代码,以了解为什么会出现某些输出。

stuff = {'purple':[0, 106, 506, 'SI', 'Lauren'], 'blue':'Cornflower', 'yo':'green'}
stuff_keys_sorted = sorted(stuff.keys())
print sorted(stuff.keys())
for k in stuff_keys_sorted:
    if type(stuff[k]) == type(['hello', 'goodbye']):
        for item in stuff[k]:
            print item
print k

当前输出为:

0
106
506
SI
Lauren
yo

我明白为什么直到“哟”的最后一行都发生了一切。为什么“哟”是打印出来的唯一选项,我的代码不应该只打印字典中的任何键吗?

【问题讨论】:

  • 您正在使用print k 打印最后一个键,因为它不是循环的一部分。您需要将其 缩进 使其成为循环的一部分。
  • 旁注:无论您在type(['hello', 'goodbye']) 的列表中输入什么内容,都将始终使用list 作为类型。在这种情况下,您实际上要验证什么
  • if type(stuff[k]) == type(['hello', 'goodbye']): 应该做什么?

标签: python python-2.7 dictionary output


【解决方案1】:

您将print k 语句置于循环之外for 循环在 Python 到达该语句时完成,然后只打印 k 的最后一个值。

如果你想打印每个键,你需要让它成为循环的一部分:

for k in stuff_keys_sorted:
    # ...
    print k

关于您的代码的其他一些注释:

  • 您不必调用.keys()stuff_keys_sorted = sorted(stuff) 就足以获得字典键的排序序列。
  • 要测试特定类型,请使用isinstance() 而不是type(..) == type(..)

    if isinstance(stuff[k], list):
    

    即使您确实需要使用type(),也不需要包含内容的列表; type([]) 就足够了。但是使用type(..) is list 也是如此(因为type([]) 的结果是list,并且每个Python 内置类型只有一个副本,因此使用is 将是一个更快的测试)。

【讨论】:

  • 非常感谢您的解释,因为它在 for 循环之外,所以它只会打印“yo”!还要感谢有关使用 if isinstance(stuff[k], list) 的提示:这比仅使用 type 更有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多