【问题标题】:Group items in Python在 Python 中对项目进行分组
【发布时间】:2021-08-16 13:03:45
【问题描述】:

我正在尝试根据他们的语言对所有这些进行分组

        [('Lanice', 'Montre', 'bayurzx@gmail.com', 'en'),
         ('Do', 'Ji', 'bomolumo@yahoo.com', 'es'), 
         ('Edem', 'Lamoine', 'yemiade5700@gmail.com', 'zh-Hans'), 
         ('Celine', 'Jerry', 'bomolumo30@gmail.com', 'ar'), 
         ('Kerry', 'Mabs', 'bomol@gmail.com', 'ar'), 
         ('Tom', 'Maine', 'yemiade@gmail.com', 'fr'), 
         ('Mary', 'Maine', 'yemiade5700@gmail.com', 'fr'), 
         ('John', 'Doe', 'johndoe@gmail.com', 'bg'), 
         ('Johnny','Bravo', 'johnnybravo@gmail.com', 'en')]

输出将是这样的: 输出 =

     [{"en": ['johnnybravo@gmail.com', 'bayurzx@gmail.com']},
      {"es": ["bomolumo@yahoo.com"]},
      {"zh-Hans": ['yemiade5700@gmail.com']},
      ...]

使语言 dict 独一无二

【问题讨论】:

  • 那个数据结构没什么意义。以语言为键的单个字典让我觉得更有用。
  • 你有没有尝试过你遇到的任何问题?

标签: python arrays sorting


【解决方案1】:

您可以使用collections.defaultdict

from collections import defaultdict

output = defaultdict(list)
for *_, mail, lang in data:
    output[lang].append(mail)

defaultdict(<class 'list'>, {'en': ['bayurzx@gmail.com', 'johnnybravo@gmail.com'], 
                             'es': ['bomolumo@yahoo.com'], 
                             'zh-Hans': ['yemiade5700@gmail.com'], 
                             'ar': ['bomolumo30@gmail.com', 'bomol@gmail.com'], 
                             'fr': ['yemiade@gmail.com', 'yemiade5700@gmail.com'], 
                             'bg': ['johndoe@gmail.com']})

【讨论】:

    【解决方案2】:
    data = [('Lanice', 'Montre', 'bayurzx@gmail.com', 'en'),
             ('Do', 'Ji', 'bomolumo@yahoo.com', 'es'),
             ('Edem', 'Lamoine', 'yemiade5700@gmail.com', 'zh-Hans'),
             ('Celine', 'Jerry', 'bomolumo30@gmail.com', 'ar'),
             ('Kerry', 'Mabs', 'bomol@gmail.com', 'ar'),
             ('Tom', 'Maine', 'yemiade@gmail.com', 'fr'),
             ('Mary', 'Maine', 'yemiade5700@gmail.com', 'fr'),
             ('John', 'Doe', 'johndoe@gmail.com', 'bg'),
             ('Johnny','Bravo', 'johnnybravo@gmail.com', 'en')]
    

    也许有帮助:

    output = {_user[-1]:[] for _user in data}
    
    [output[_user[-1]].append(_user[2]) for _user in data]
    
    print(output)
    

    结果:

    {
    'en': ['bayurzx@gmail.com', 'johnnybravo@gmail.com'],
    'es': ['bomolumo@yahoo.com'],
    'zh-Hans': ['yemiade5700@gmail.com'],
    'ar': ['bomolumo30@gmail.com', 'bomol@gmail.com'],
    'fr': ['yemiade@gmail.com', 'yemiade5700@gmail.com'],
    'bg': ['johndoe@gmail.com']
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2013-03-12
      • 2014-09-24
      • 2017-05-24
      相关资源
      最近更新 更多