【问题标题】:How to convert the dictionary containing keys and list of list value?如何转换包含键和列表值列表的字典?
【发布时间】:2020-11-03 04:25:54
【问题描述】:
  • 如何将包含键和列表值列表的字典转换为包含键和列表的字典,将重复项放入新创建的列表中?
  • 我尝试运行以下函数,但计算机出现“内存错误”
from collections import defaultdict

my_dict = defaultdict(list)    
for k, v in zip(df_Group.guest_group, df_Group.list_guest):
  for item in v:
    v.append(item)    
  my_dict[k].append(set(v))
  • 我的原始字典由一个数据框的 2 列创建,例如:{Group1: [[1,2,3,4], [1, 2, 5, 6 ]]}
  • 我想要我的字典:{Group1: [1,2,3,4,5,6]}

【问题讨论】:

    标签: python-3.x dataframe dictionary nested-lists


    【解决方案1】:

    据我了解,您本质上想要做的是扁平化您的列表,同时保留独特的项目。 可以通过将list 转换为set 然后再转换回list 来实现唯一项。 拆包部分在this 帖子中得到了很好的解释。这是适合您的工作代码-

    df_dict = {
        'Group1': [[1,2,3,4], [1, 2, 5, 6 ]],
        'Group2': [[1,2], [2,3],[2,3,4]]
    }
    
    final_dict = {}
    
    for k, v in df_dict.items():
        # flatten the list using double list comprehension
        flat_list = [item for sublist in v for item in sublist]
        final_dict[k] = list(set(flat_list))
    

    这将final_dict 设为 -

    {'Group1': [1, 2, 3, 4, 5, 6], 'Group2': [1, 2, 3, 4]}
    

    如果这回答了您的问题,请告诉我。

    编辑列表之间的整数值 - 如果我们有一个中间有整数值的列表,那么你会得到int object not iterable error,要解决这个问题,我们可以检查实例为int,并自己制作项目列表

    工作代码-

    df_dict = {
        'Group1': [[1,2,3,4], 3, [1, 2, 5, 6 ]],
        'Group2': [[1,2], [2,3],[2,3,4]],
    }
    
    final_dict = {}
    
    for k, v in df_dict.items():
        # making a new list 
        new_list = []
        for item in v:
            # for int we will convert it to 1 length list
            if isinstance(item, int):
                item = [item]
            for ele in item:
                new_list.append(ele)
        final_dict[k] = list(set(new_list))
    
    final_dict
    

    最后的字典 -

    {'Group1': [1, 2, 3, 4, 5, 6], 'Group2': [1, 2, 3, 4]}
    

    如预期的那样

    【讨论】:

    • 感谢您的帮助。我试过这种方式,但得到错误'int' object is not iterable'并且无法用 range(len(v)) 解决
    • 如果你使用了我在代码中给出的字典,那么你不应该得到那个错误。我能知道你用的是什么类型的字典吗?
    • 我已经为你的问题添加了一个编辑,告诉我这是否解决了你的问题。
    • 我的字典类型是'defaultdict',值类型是'defaultdict object of collections module'。当我打印 dict 时,它类似于:'defaultdict(, {'Group1': [[170323, 38785, 43158, ...], [170323, 38785, 43158...]], 'Group2 ':[[42276, 67349, 56879,...], [422763, 673490, 588879,...],...]]})
    • 感谢您的努力,但仍然得到错误''int' object is not iterable'。该字典包含数据框中 2 列的所有键和值,其中键是“组名”,值是“访客 ID 列表”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2021-12-09
    • 2022-10-13
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多