蟒蛇; 字典迭代

phi*_*thy 0 python iteration dictionary for-loop list

z = []
for k, v in b.iteritems():
    if v == "Supplementary Assignment, Smith, Bowen":
        z.append(not k)
Run Code Online (Sandbox Code Playgroud)

您好,我正在尝试迭代dict中的值.这里的目标是要z.append()在所有的键" b不包含定义的多重价值" vif声明.因此,如果dict' b'包含一个值为'Smith'的键/值对,则该键将从z.append()调用中排除,而所有其他键将被追加.感谢您的帮助!

Mar*_*ers 8

您需要使用成员资格测试(not in)测试序列或集合:

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

或者,在列表理解中更紧凑:

z = [key for key, value in b.iteritems() if value not in {"Supplementary", "Assignment", "Smith", "Bowen"}]
Run Code Online (Sandbox Code Playgroud)

这将列出b其值未在集合中列出的所有键.

如果循环效率是最重要的并且您 3.3 之前使用Python版本,那么首先将该集存储在局部变量中并在循环中使用它:

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

或列表comp版本:

excluded = {"Supplementary", "Assignment", "Smith", "Bowen"}
z = [key for key, value in b.iteritems() if value not in excluded]
Run Code Online (Sandbox Code Playgroud)

Python 3.3识别in {...}not in {...}语法(带有集合)并优化代码以使用frozenset()集合文字的局部常量.