【问题标题】:How can I split a list of dictionaries in separate lists of dictionaries based on some condition?如何根据某些条件将字典列表拆分为单独的字典列表?
【发布时间】:2021-05-21 07:05:43
【问题描述】:

我是 python 新手,我正在尝试根据某些条件将字典列表拆分为单独的字典列表。

这就是我的列表的样子:

[{'username': 'AnastasiadesCY',
  'created_at': '2020-12-02 18:58:16',
  'id': 1.33421029132062e+18,
  'language': 'en',
  'contenttype': 'text/plain',
  'content': 'Pleased to participate to the international conference in support of the Lebanese people. Cypriot citizens, together with the Government ????????, have provided significant quantities of material assistance, from the day of the explosion until today.\n\n#Lebanon ????????'},
 {'username': 'AnastasiadesCY',
  'created_at': '2020-11-19 18:13:06',
  'id': 1.32948788307022e+18,
  'language': 'en',
  'contenttype': 'text/plain',
  'content': '#Cyprus stand ready to support all efforts towards a coordinated approach of vaccination strategies across Europe, that will prove instrumental in our fight against the pandemic.\n\nUnited Against #COVID19 \n\n#EUCO'},...

我想将具有相同用户名的所有列表元素拆分并分组到单独的字典列表中。列表的元素 - 所以每个字典 - 按用户名排序。

有没有办法遍历字典并将每个元素附加到列表中,直到“item 1”中的用户名等于“item 1 + 1”中的用户名等等?

感谢您的帮助!

【问题讨论】:

    标签: python list loops dictionary if-statement


    【解决方案1】:

    更好的办法是创建一个字典,其中username 作为键,值作为用户属性列表

    op = defauldict(list)
    for user_dic in list_of_userdictss:
        op[user_dic.pop('username')].append(user_dic)
    op = OrderedDict(sorted(user_dic.items()))
    

    【讨论】:

    • 这不是有效的python代码-<list>...请不要覆盖内置list。为什么要使用两个字典?
    • @h4z3 我只是使用<list> 作为对某些列表的引用。我没有在任何地方覆盖内置列表。
    【解决方案2】:

    如果我们按它对列表进行排序,找到相同的东西效果最好 - 然后所有相同的名称都彼此相邻。

    但即使在排序之后,我们也不需要手动执行此类操作 - 已经有工具可以做到这一点。 :) - itertools.groupby documentationa nice explanation how it works

    from itertools import groupby
    from operator import itemgetter
    
    my_list.sort(key=itemgetter("username"))
    result = {}
    for username, group in groupby(my_list, key=itemgetter("username")):
       result[username] = list(group)
    

    result 是一个以用户名作为键的字典

    如果您想要一个列表列表,请先执行result = [],然后再执行result.append(list(group))

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2021-09-09
      • 1970-01-01
      • 2022-11-12
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多