字典迭代

时间:2018-07-24 16:38:20

标签: python

我得到了这个数据集,并负责循环查找该词典中的最大值。我对为什么将print函数放置在循环(#1)内与将其放置在循环(#2)之外会产生不同的答案感到困惑。

data = {'Jeremy':73284, 'Hansel':8784.3, 'Uee':9480938.2,
        'Seolhyun':984958.3, 'Ketsuno Ana':24131, 'Trump':45789}

highest_network = data["Jeremy"]

for key,value in data.items():
    if value > highest_network:
        highest_network = value
        print(key,value) #1 


print(key,value) #2

对不起,我仍然是python的初学者,因此我对某些概念仍然不太熟悉。

2 个答案:

答案 0 :(得分:1)

在执行过程中的任何给定时间,python都会保留本质上是存在的变量名及其值的字典。它与作用域进行交互的方式有点令人困惑/复杂,但足以说明在这种情况下,keyvalue在其{{1}之外的作用域中声明}循环

现在,请注意第一个for语句。由于它位于循环内,并且printkey将不断更新,因此它将在每次执行时打印当前的valuekey

第二条value语句在循环之外,并在循环运行后 执行。请记住,变量printkey仍在作用域内,并且仍然保留分配给它们的最后任何内容(在这种情况下,value并且key将是您从value获得的最后一个值)。这就是为什么它们表现不同的原因-因为每次您尝试打印data.items()key时它们的值都是不同的。

请记住,就标准而言,value放置数据的顺序实际上是任意的。从{<1>}在您的计算机上运行 到每个data.items()循环中放入每个键的顺序是一致的,但是,如果将相同的代码放在其他人的计算机上,则操作可能会不同。因此,您不应该依赖于这种行为是一致的。

答案 1 :(得分:0)

第一个print语句位于条件分支和for循环内。 因此,每次if语句给出的条件为True时,print函数都会执行。现在,根据您的数据,这仅适用于"Uee"的情况,其值具有最大的值,并且也是第一个大于"Jeremy"的值。另外请注意,items()返回的顺序不必每次都相同,因此您可以获得不同的结果,并且第一个print可以执行多次。

现在,第二个print在for循环之外,这意味着keyvalue变量保留它们被分配的最后一个值。同样,这可能是字典中的任何内容,因为items()返回的顺序不必相同。如果按照示例中指定的顺序遍历字典,它将打印"trump"条目。