Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查同一行的2个字典中是否存在键_Python_Dictionary - Fatal编程技术网

Python 检查同一行的2个字典中是否存在键

Python 检查同一行的2个字典中是否存在键,python,dictionary,Python,Dictionary,我有两本字典: 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) 以及: 但是有没有更好的方法呢 一个班轮:) 一行:) 不-这是非常好

我有两本字典:

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) 
以及:

但是有没有更好的方法呢

一个班轮:)

一行:)


不-这是非常好的,因为它得到。。。对于正在发生的事情,它是可读且显而易见的:

如果
dict
s的数量增加:

all('abc' in d for d in (d1, d2, d3, d4))
或者,先进行预计算,然后访问:

common_keys = set(d1).intersection(d2, d2, d3, d4)
'abc' in common_keys

不-这是非常好的,因为它得到。。。对于正在发生的事情,它是可读且显而易见的:

如果
dict
s的数量增加:

all('abc' in d for d in (d1, d2, d3, d4))
或者,先进行预计算,然后访问:

common_keys = set(d1).intersection(d2, d2, d3, d4)
'abc' in common_keys
我认为解决办法是:

if ('abc' in a) and ('abc' in b):
    print(True)
else:
    print(False)
这是最好的、最具Python风格的方法。

我认为解决方案:

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

这是最好的、最符合python的方法。

如何使用列表理解将其推广到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')

我花了一段时间才学会喜欢列表理解,但它们实际上只是“循环”的一行,而且速度也非常快

如何使用列表理解将词典归纳为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')

我花了一段时间才学会喜欢列表理解,但它们实际上只是“循环”的一行,而且速度也非常快

对于一个关键的成员资格检查,这实际上是过分的。如果
a
b
较大,则会产生O(M)(其中M是最小的密钥计数)成本,而密钥成员资格测试本身将是O(1)。最好是在a中使用“abc”,在b中使用“abc”,这样更简单、更快。如果你要做很多这样的测试,那么使用dict视图可能是一个优势,但对于这种简单的情况,你在这里浪费了CPU周期。如果“abc”在
a
中不存在,那么处理
b
就没有意义了。在我看来,这种交叉还为时过早。这样一来,您就失去了惰性评估的好处。对于一个关键的成员资格检查,这实际上是过火了。如果
a
b
较大,则会产生O(M)(其中M是最小的密钥计数)成本,而密钥成员资格测试本身将是O(1)。最好是在a中使用“abc”,在b中使用“abc”,这样更简单、更快。如果你要做很多这样的测试,那么使用dict视图可能是一个优势,但对于这种简单的情况,你在这里浪费了CPU周期。如果“abc”在
a
中不存在,那么处理
b
就没有意义了。在我看来,这种交叉还为时过早。这样就失去了惰性计算的好处。在Python2.x中,
a.keys()+b.keys()
只会将两个列表串联在一起,这对
检查中的
'abr'不起作用。我不知道会出什么问题,除非它可能有重复的值……比如:
k1=[1]
k2=[2]
,然后
k1+k2
[1,2]
-所以,如果我们想看看
1
是否在两者中,那么k3中的
1
是真的,即使它不在两者中。。。。连接只会告诉你它是否在任何一个目录中…@zmo;如果
a
有钥匙而
b
没有怎么办?如果你把这些键加在一起,它将始终是真的,而期望的结果将是假的。对,大便发生了:-)删除了错误的答案。谢谢你指出这一点。(我不明白为什么我会时不时地说出这样愚蠢的事情……而这正是我在实际代码中从未犯过的错误)。在Python2.x中,
a.keys()+b.keys()
只会将两个列表串联在一起,这对于
检查中的
'abr'是不正确的,除了它可能有重复的值之外…比如说:
k1=[1]
k2=[2]
,那么
k1+k2
就是
[1,2]
-所以,如果我们想看看
1
是否在两者中,那么k3中的
1
是真的,即使它不在两者中。。。。连接只会告诉你它是否在任何一个目录中…@zmo;如果
a
有钥匙而
b
没有怎么办?如果你把这些键加在一起,它将始终是真的,而期望的结果将是假的。对,大便发生了:-)删除了错误的答案。谢谢你指出这一点。(我不明白为什么我会时不时地说出这样愚蠢的事情……而这正是我在实际代码中从未犯过的错误)。我认为,第二种错误对性能有负面影响。如果在
a
中不存在“abc”,则处理
b
是没有意义的。在我看来,这种交叉还为时过早。这样就失去了惰性评估的好处。@ElmoVanKielmo取决于操作的频率,如果
d1
始终是“主要”命令,我认为第二个命令会对性能产生负面影响。如果在
a
中不存在“abc”,则处理
b
是没有意义的。在我看来,这种交叉还为时过早。这样就失去了延迟求值的好处。@ElmoVanKielmo取决于操作的频率,如果
d1
始终是“主要”命令。。。