如何列出字典中包含排除项的键数

时间:2019-07-30 11:22:36

标签: python loops if-statement

对“总计”输出感兴趣,以反映与if语句中的条件匹配的新键的数量。如果您还可以提供有关如何显示由于if语句而未返回多少键的说明,那将很有帮助。

d = {1:0.3246, 2:3.222, 3:3344, 2:0.3444, 5:1.09, 6:222.3}


for key in list(d)[:4]:
    if key == 2:
        continue
    print(key, d[key])
keyresults = key
print('Total unique keys found:', keyresults)

预期结果:

1 0.3246
3 3344
5 1.09
Total unique keys found: 3
Total unique keys not found: 2

实际结果:

1 0.3246
3 3344
5 1.09
Total unique keys found: 5

2 个答案:

答案 0 :(得分:0)

您声明的字典是顺序“分配的”。等到密钥以新值重用时,python交错器会删除该密钥的旧值,并将其替换为新值。因此,您不能将相同的值映射到两个键。但是,defaultdict可以帮助您解决两个关键问题。在这种情况下,使用set获取唯一可标识的密钥并标记重复项。话虽这么说,哪个是实际的,哪个是重复的,完全可以解释。

在这里,默认字典的工厂是list,其中值作为list创建。

from collections import defaultdict
d=defaultdict(list)
for k,v in l:
      d[k].append(v)
dict(d)
{1: [111, 'aaa'], 2: [222, 'bbb'], 3: [333, 'ccc']}

答案 1 :(得分:-1)

看看您的代码示例,您似乎在过滤列表方面遇到麻烦。如果您真的在寻找重复的键,那将是一个漫长的搜索:)

您可以使用dict-comprehension过滤dict,如下所示:

filtered_dict = {k: v for k, v in d.items() if k != 2}

然后,您只需拨打len()即可获得唯一键的数量。字典中不能使用双键。

d = {1:0.3246, 2:3.222, 3:3344, 2:0.3444, 5:1.09, 6:222.3}
print(len(d))  #  = 5, duplicate keys are void

filtered_dict = {k: v for k, v in d.items() if k != 2}
print(len(filtered_dict))  #  = 4, since key 2 is dropped.