z = []
for k, v in b.iteritems():
if v == "Supplementary Assignment, Smith, Bowen":
z.append(not k)
您好,我正在尝试迭代dict中的值。这里的目标是z.append()
“b
”中所有不包含v
语句中为if
定义的多个值的键。因此,如果dict'b
'包含值为'Smith'的键/值对,则该键将从z.append()
调用中排除,而所有其他键将被追加。感谢您的帮助!
答案 0 :(得分:8)
您需要使用成员资格测试(not in
)对序列或集进行测试:
z = []
for k, v in b.iteritems():
if v not in {"Supplementary", "Assignment", "Smith", "Bowen"}:
z.append(k)
或者,在列表理解中更紧凑:
z = [key for key, value in b.iteritems() if value not in {"Supplementary", "Assignment", "Smith", "Bowen"}]
这会列出b
中其值未在集合中列出的所有密钥。
如果循环效率是最重要的,并且您在 3.3之前使用Python版本,那么首先将该集存储在局部变量中并在循环中使用它:
z = []
excluded = {"Supplementary", "Assignment", "Smith", "Bowen"}
for k, v in b.iteritems():
if v not in excluded:
z.append(k)
或列表comp版本:
excluded = {"Supplementary", "Assignment", "Smith", "Bowen"}
z = [key for key, value in b.iteritems() if value not in excluded]
Python 3.3识别in {...}
或not in {...}
语法(带有一组)并优化代码,以便为集合文字使用本地frozenset()
常量。