计算每个字典键中包含一个值的值的数量

Jul*_*uls 2 python dictionary python-3.x

我有一个带有 200e3 个整数键的字典,每个键有一个或两个值(字符串)。

我需要编写逻辑来检查每个键是否具有多个值,如果是,则添加到列表中。

my_dict = defaultdict(list)
my_dict = {1: ['789456', '456123'], 2: '123456', 3: '987654'}
final = []
Run Code Online (Sandbox Code Playgroud)

这是我最初的解决方案。这适用于两个值,但当只存在一个值时返回字符的长度。

for key, value in my_dict.items():
    if len(value) > 1:
        final.append(key)
    else:
        continue
Run Code Online (Sandbox Code Playgroud)

我试过 enumerate 但它只返回范围。

for x in enumerate(my_dict.items()):
    print(x)
Run Code Online (Sandbox Code Playgroud)

我想出了这个解决方案,但我不确定使用时是否会有任何问题defaultdict(list)。或者,如果有更大的问题,我可能看不到。

for key, value in my_dict.items():
    if isinstance(value, list):
       final.append(key)
    else:
       continue
Run Code Online (Sandbox Code Playgroud)

lpr*_*shv 5

请试试这个:

final = [k for k,v in my_dict.items() if type(v) == list and len(v) > 1]
Run Code Online (Sandbox Code Playgroud)

或在您的代码中:

for key, value in my_dict.items():
    # only this additional condition is present before `and`
    if type(value) == list and len(value) > 1:
        final.append(key)
Run Code Online (Sandbox Code Playgroud)

在这里,'34534'['534', '456465']都是可迭代的,len()函数对它们都适用,因此,我们需要检查值的类型,并且只检查list.

  • 我怀疑如果类型是列表,它总是意味着超过 1 个项目,因此通过删除第二个条件 (len>1),您的代码可能会变得更快 (3认同)