1

我有两本字典:

a = {'abc': 12}
b = {'abcd': 13, 'abc': 99}

我想检查两个字典中是否存在某个键。在这种情况下,我想检查 a 和 c 是否都包含密钥“abc”

我有以下代码:

if 'abc' in a:
    if 'abc' in b:
        print(True)
    else:
        print(False)
else:
    print(False) 

和:

if ('abc' in a) and ('abc' in b):
    print(True)
else:
    print(False)

但是有更好的方法吗?

4

5 回答 5

5

不 - 这几乎和它一样好......它对于正在发生的事情是可读且明显的:

如果dicts 的数量增加:

all('abc' in d for d in (d1, d2, d3, d4))

或者,只需先进行预计算,然后访问:

common_keys = set(d1).intersection(d2, d2, d3, d4)
'abc' in common_keys
于 2013-06-26T15:04:34.407 回答
3

一个班轮:)

print ('abc' in a) and ('abc' in b)
于 2013-06-26T15:02:09.463 回答
2
>>> 'abc' in (a.viewkeys() & b.viewkeys())
True
于 2013-06-26T15:02:42.637 回答
0

我认为解决方案:

if ('abc' in a) and ('abc' in b):
    print(True)
else:
    print(False)

是最好和最 Pythonic 的方式来做到这一点。

于 2013-06-26T15:05:27.187 回答
0

使用列表理解泛化到 N 个字典怎么样:

a = {'abc': 12}
b = {'abcd': 13, 'abc': 99}
c = {'abcd': 13, 'abc': 99, 'xyz': 1}
key = 'abc'

if any([key in d.keys() for d in [a,b,c]]):
  print('key found in at least one dict')
elif all([key in d.keys() for d in [a,b,c]]):
  print('key found in all dicts')

我花了一段时间才学会喜欢列表推导,但它们实际上只是一行“for-loops”,而且速度也很快。

于 2015-02-23T04:23:40.847 回答