代码之家  ›  专栏  ›  技术社区  ›  A l w a y s S u n n y

使用列表理解生成词典列表的问题

  •  1
  • A l w a y s S u n n y  · 技术社区  · 6 年前
    feed_mapping = {'BC': 11, 'HA':12, 'AB':16,'GR':18}
    x = ['AB-16007891', 'HA-4625798','GR-4444545','BC-4447764','HA-46257854']
    feed = [{"feed": feed_mapping[i.split('-')[0]],"id":[i]} for i in x]
    print(feed)
    

    通过以上列表理解,我可以生成字典列表。 我需要将值附加到 id feed 值相同

    [{'feed': 16, 'id': ['AB-16007891']}, {'feed': 12, 'id': ['HA-4625798']}, {'feed': 18, 'id': ['GR-4444545']}, {'feed': 11, 'id': ['BC-4447764']}, {'feed': 12, 'id': ['HA-46257854']}]
    

    预期产量:

    [{'feed': 16, 'id': ['AB-16007891']}, {'feed': 12, 'id': ['HA-4625798','HA-46257854']}, {'feed': 18, 'id': ['GR-4444545']}, {'feed': 11, 'id': ['BC-4447764']}]
    
    2 回复  |  直到 6 年前
        1
  •  5
  •   Rakesh    6 年前

    使用 itertools.groupby

    前任:

    from itertools import groupby
    feed_mapping = {'BC': 11, 'HA':12, 'AB':16,'GR':18}
    x = ['AB-16007891', 'HA-4625798','GR-4444545','BC-4447764','HA-46257854']
    x.sort()
    
    feed = [{"feed": feed_mapping[k], "id": list(v)} for k, v in groupby(x, lambda x: x.split('-')[0])]
    print(feed)
    

    [{'feed': 16, 'id': ['AB-16007891']},
     {'feed': 11, 'id': ['BC-4447764']},
     {'feed': 18, 'id': ['GR-4444545']},
     {'feed': 12, 'id': ['HA-46257854', 'HA-4625798']}]
    
        2
  •  1
  •   Remy    6 年前

    feed_mapping = {'BC': 11, 'HA': 12, 'AB': 16, 'GR': 18}
    x = ['AB-16007891', 'HA-4625798', 'GR-4444545', 'BC-4447764', 'HA-46257854']
    feed = [{"feed": feed_value, "id": [i for i in x if feed_key in i]} for
            feed_key, feed_value in feed_mapping.items()]
    print(feed)
    
    >>> [{'feed': 11, 'id': ['BC-4447764']}, {'feed': 12, 'id': ['HA-4625798', 'HA-46257854']}, {'feed': 16, 'id': ['AB-16007891']}, {'feed': 18, 'id': ['GR-4444545']}]
    

    我使用以下for循环将feed\u映射中的键和值拆分为:

    for feed_key, feed_value in feed_mapping.items()]
    

    然后我有第二个(嵌套for循环)来添加项 x id 字段:

    i for i in x
    

    我注意到如果 feed_mapping i ,我在嵌套for循环中使用以下if语句执行此操作:

    [i for i in x if feed_key in i]
    
        3
  •  1
  •   Mykola Zotko    6 年前

    您可以转换列表 x defaultdict

    from collections import defaultdict
    
    feed_mapping = {'BC': 11, 'HA':12, 'AB':16,'GR':18}
    x = ['AB-16007891', 'HA-4625798','GR-4444545','BC-4447764','HA-46257854']
    
    x_ = defaultdict(list)
    for i in x:
        key = i.split('-')[0]
        x_[key].append(i)
    
    [{'feed': feed_mapping[k], 'id': v} for k, v in x_.items()]
    # [{'feed': 16, 'id': ['AB-16007891']}, {'feed': 12, 'id': ['HA-4625798', 'HA-46257854']}, {'feed': 18, 'id': ['GR-4444545']}, {'feed': 11, 'id': ['BC-4447764']}]