蟒蛇;字典迭代

时间:2013-11-19 19:57:19

标签: python list for-loop dictionary iteration

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()调用中排除,而所有其他键将被追加。感谢您的帮助!

1 个答案:

答案 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()常量。