python字典迭代

python字典迭代,python,list,for-loop,dictionary,iteration,Python,List,For Loop,Dictionary,Iteration,您好,我正在尝试迭代dict中的值。这里的目标是在“b”中附加所有键,这些键不包含if语句中为v定义的多个值。因此,如果dict“b”包含一个值为“Smith”的键/值对,则该键将从z.append调用中排除,而所有其他键都将被追加。谢谢你的帮助 您需要对序列或集合进行测试,使用的成员资格测试不在: 或者,列表更紧凑: z = [] for k, v in b.iteritems(): if v not in {"Supplementary", "Assignment", "Smith"

您好,我正在尝试迭代dict中的值。这里的目标是在“b”中附加所有键,这些键不包含if语句中为v定义的多个值。因此,如果dict“b”包含一个值为“Smith”的键/值对,则该键将从z.append调用中排除,而所有其他键都将被追加。谢谢你的帮助

您需要对序列或集合进行测试,使用的成员资格测试不在:

或者,列表更紧凑:

z = []
for k, v in b.iteritems():
    if v not in {"Supplementary", "Assignment", "Smith", "Bowen"}:
        z.append(k)
这将列出b中其值未在集合中列出的所有键

如果循环效率非常重要,并且您使用的是3.3之前的Python版本,则首先将集合存储在局部变量中,然后在循环中使用该集合:

z = [key for key, value in b.iteritems() if value not in {"Supplementary", "Assignment", "Smith", "Bowen"}]
或列表组件版本:

z = []
excluded = {"Supplementary", "Assignment", "Smith", "Bowen"}
for k, v in b.iteritems():
    if v not in excluded:
        z.append(k)

Python3.3使用集合识别{…}语法或非{…}语法,并优化代码以使用本地frozenset常量作为集合文字。

好的,谢谢Martijn。我知道我很接近,但不知道关键词中没有。太好了,再次感谢!可能是错的……但是把这个{补充,赋值,史密斯,伯恩}放在一个变量中,这样你就不会在列表comp中多次重新创建它了,不是更好吗?@iCodez:它是一个常量;加载速度相当快。在Python3.3及更高版本中,它将设置为常量,在之前的版本中,它将字符串作为常量加载,并在每次循环迭代中执行BUILD_set。加载一个常量的速度和加载一个本地常量的速度一样快。@iCodez:我现在开始在答案中默认使用Python 3.3,除非我看到Python早期版本的证据。我最初对{'supplemental',…}语法感到惊讶。这不应该是一个列表或元组吗?这样不是语法错误吗?只有在尝试之后,我才注意到这实际上是用于编写集合的有效python。我不知道他们加了。在Python2.7中,现在我已经用谷歌搜索了它。你每天都会学到一些东西:-
z = []
excluded = {"Supplementary", "Assignment", "Smith", "Bowen"}
for k, v in b.iteritems():
    if v not in excluded:
        z.append(k)
excluded = {"Supplementary", "Assignment", "Smith", "Bowen"}
z = [key for key, value in b.iteritems() if value not in excluded]