Python 洞察循环

Python 洞察循环,python,dictionary,for-loop,iteration,theory,Python,Dictionary,For Loop,Iteration,Theory,嘿,我是从StackOverflow得到的,它计算两个字典之间的公共值,但我希望有人能花点时间来分解这个过程,因为这个主题的答案部分没有解释 我想我明白了 dictionary1[key]用于dictionary1中的key,如果dictionary2中的key和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)

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

我想我明白了

dictionary1[key]用于dictionary1中的key,如果dictionary2中的key和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:呢


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

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

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]

我甚至想不出这个词来形容它!这样读起来容易多了。因此,共享的_项在for循环外会是一个空的dict,因为共享的_项={}?奇怪的是,当你声明x[k]==y[k]…这似乎是从我在==>=之间切换时得到的结果得出的,没有问题,但我不理解你的问题。你能说得更清楚些吗?我假设k=键,值对中的键。因此,它只是匹配键,而没有考虑值。正如我正在比较的两个dict一样,它们都有匹配的键和匹配的值,但也有键匹配但值不同的情况。那么x[k]==y[k]是只匹配键,还是考虑了值,只使用精确的键、值匹配或键匹配的位置填充共享_项呢。希望这足够清楚,谢谢。首先,我对
x
y
一无所知,我只是说这两段代码是等效的。如果
x
dict
k
将是
x
中的一个键。另外,如果k在y和x[k]==y[k]中,则代码
没有任何意义。如果
k
不在
y
中,表示
y
没有键
k
,表达式
x[k]==y[k]
将抛出错误。如果y中的k和x中的k以及y.get(k,None)=x.get(k,None)
,则更好的方法是
。这将使用精确的键值匹配填充
shared_dict