【问题标题】:Insight Into A Loop洞察一个循环
【发布时间】:2021-04-17 21:53:53
【问题描述】:

嘿,我从 StackOverflow 得到这个,它计算两个字典之间的共同值,但我希望有人可以花时间分解这个过程,因为它没有在主题的答案部分解释。

我想我明白了;

dictionary1[key] for key in dictionary1 if key in dictionary2 and dictionary1[key] == dictionary2[key]

shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
print(shared_items)

它是否只匹配两个字典中的键、值匹配的位置?还有,为什么一开始是 k:?

无论如何,我知道这是一个随机问题,但是这种类型的迭代非常简洁,尤其是当您将 == 更改为 = 时,它可能非常有用,希望有人可以花时间分解它,以便我可以把我的头绕在它周围。谢谢。

【问题讨论】:

    标签: python dictionary for-loop iteration theory


    【解决方案1】:

    这被称为“字典理解”,类似于“列表理解”。基本上,这条线

    shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
    

    相当于:

    shared_items = {}
    for k in x:
        if k in y and x[k] == y[k]:
            shared_items[k] = x[k]
    

    【讨论】:

    • 理解我什至想不出这个词!这样更容易阅读。所以 shared_items 将是 for 循环之外的一个空字典,因为 shared_items = {} ?
    • 很好奇,当你声明 x[k] == y[k] 时,它会计算值吗……这似乎来自我在 == >=
    • 没问题,但我不明白你的问题。你能说得更清楚吗?
    • 我假设 k = 键值对中的键。那么它只是匹配键而不考虑值。由于我正在比较的两个 dicts 具有匹配的键和匹配的值,但也存在键匹配但值不同的情况。 x[k] == y[k] 也是只匹配键还是将值考虑在内,并且只使用确切的键、值匹配或键匹配的位置填充 shared_items。希望足够清楚,谢谢。
    • 首先,我对xy一无所知,我只是说这两段代码是等价的。如果xdict,则k 将是x 中的一个键。此外,代码if k in y and x[k] == y[k] 没有任何意义。如果k 不在y 中,意味着y 没有键k,则表达式x[k] == y[k] 将抛出错误。更好的方法是if k in y and k in x and y.get(k, None) == x.get(k, None)。这将使用精确的键值匹配填充shared_dict
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多