Python字典初始化和值追加到列表中

问题描述 投票:0回答:2

问题:编写函数,该函数对于给定的对象列表,返回类型为[object]的字典。例如:func([1,2.0,3,'g']) returns: {'i':[1,3], 'f': [2.0], 'c': ['g'], 'o': []}

  • 整数的键i
  • 用于浮点数的键f
  • 字符的c
  • 其他键o

我的代码:

def make_dict(lst):
    my_dict = {'i': [], 'f': [], 'c': [], 'o': []}
    [my_dict['i'].append(item) if isinstance(item, int) else my_dict['f'].append(item) if isinstance(
        item, float) else my_dict['c'].append(item) if isinstance(item, str) and len(item) == 1 else my_dict['o'].append(item) for item in lst]
    return my_dict

此函数返回相应的字典,但我需要使其成为单行字典,而且,我不喜欢它的完成方式。我知道这里使用列表理解是不好的。

虽然我的过程是首先使它成为多行函数,但我确实使用了for循环和if elif语句,然后我尝试将这些行合并并最终将其降至3。

这是在将其合并为列表理解之前使用的for循环:

for item in lst:
    if isinstance(item, int):
        my_dict['i'].append(item)
    elif isinstance(item, float):
        my_dict['f'].append(item)
    elif isinstance(item, str) and len(item) == 1:
        my_dict['c'].append(item)
    else:
        my_dict['o'].append(item)
return my_dict

我的问题:我知道我需要以某种方式将某种Dictionary理解与filter()的map()结合使用,但是在互联网上搜索并发现了注释之后。我只是不知道该怎么做。

也许您可以帮我吗?谢谢!

python dictionary-comprehension
2个回答
1
投票

您想要的是按数据类型的第一个字母对数据进行分组,因此>

  • 获取其类型为type(x).__name__[0]的首字母
  • 根据此标准对数据进行分组
  • 您需要将数据提供给groupby,并按照将用于分组的相同标准进行排序。 {k:list(v)部分将从groupby对象移至dict

from itertools import groupby

def make_dict(lst):
    sorter = lambda x:type(x).__name__[0]
    return {k:list(v) for k,v in groupby(sorted(lst, key=sorter), key=sorter)}

r = make_dict([1,2.0,3,'g']) # {'f': [2.0], 'i': [1, 3], 's': ['g']}
print(r)

0
投票

有一种使用字典的方法。

© www.soinside.com 2019 - 2024. All rights reserved.