比较Python中的词典

use*_*511 5 python dictionary

给定两个字典,d1d2和一个整数l,我想找到所有的钥匙kd1这样的,要么d2[k]<lk not in l.我想输出密钥和相应的值d2,除非d2不包含密钥,我想打印0.例如,如果d1

a: 1
b: 1
c: 1
d: 1
Run Code Online (Sandbox Code Playgroud)

并且d2

a: 90
b: 89
x: 45
d: 90
Run Code Online (Sandbox Code Playgroud)

并且l是90,输出将是(可能以不同的顺序)

b 89
c 0
Run Code Online (Sandbox Code Playgroud)

在Python中执行此操作的最佳方法是什么?我刚刚开始学习这门语言,到目前为止这就是我所拥有的:

for k in d1.keys():
    if k not in d2:
        print k, 0
    else:
        if d2[k]<l:
            print k, d2[k]
Run Code Online (Sandbox Code Playgroud)

这当然是有效的(除非我有一个错字),但在我看来,会有更多的pythonic方式.

dF.*_*dF. 10

你的确很好 - 你可以简化它

for k in d1:
    if d2.get(k, 0) < l:
       print k, d2.get(k, 0)
Run Code Online (Sandbox Code Playgroud)

这对我来说是pythonic,并且几乎是对你的描述代码的直接"翻译".

如果你想避免双重查找,你可以这样做

for k in d1:
    val = d2.get(k, 0)
    if val < l:
        print k, val
Run Code Online (Sandbox Code Playgroud)


dan*_*iel 4

您可以使用 defaultdict 来简化此操作。在 defaultdict 上调用 __getitem__ 将返回“默认”值。

from collections import defaultdict
d = defaultdict(int)
print d['this key does not exist'] # will print 0
Run Code Online (Sandbox Code Playgroud)

您可以更改的另一点是不调用密钥。字典实现了iter。最好简单地写:

for k in d1:
Run Code Online (Sandbox Code Playgroud)