推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
yixiugegegege
V2EX  ›  Python

迫于逻辑实在理不清了, Python 求助

  •  
  •   yixiugegegege · Jan 16, 2021 · 3783 views
    This topic created in 1955 days ago, the information mentioned may be changed or developed.
    {
    "child": [{
    "f_brandname": "奔驰",
    "f_pyfirstletter": "B",
    "seriesname": "载货车"
    }, {
    "f_brandname": "北奔重卡",
    "f_pyfirstletter": "B",
    "seriesname": "载货车"
    }, {
    "f_brandname": "福田欧曼",
    "f_pyfirstletter": "F",
    "seriesname": "载货车"
    }, {
    "f_brandname": "江铃汽车",
    "f_pyfirstletter": "J",
    "seriesname": "载货车"
    }]
    }

    变成

    {
    "child": {
    "B": [{
    "f_brandname": "奔驰",
    "f_pyfirstletter": "B",
    "seriesname": "载货车"
    }, {
    "f_brandname": "北奔重卡",
    "f_pyfirstletter": "B",
    "seriesname": "载货车"
    }],
    "F": [{
    "f_brandname": "福田欧曼",
    "f_pyfirstletter": "F",
    "seriesname": "载货车"
    }],
    "J": [{
    "f_brandname": "江铃汽车",
    "f_pyfirstletter": "J",
    "seriesname": "载货车"
    }]
    }
    }


    就是把每个小字典给归类了,还有好多个品牌,这个是少数
    语言是 python,求 demo,
    14 replies    2021-01-17 00:05:15 +08:00
    taogen
        1
    taogen  
       Jan 16, 2021 via Android
    没写过 Python 。不过把对象数组变成哈希数组,不会很难吧
    yixiugegegege
        2
    yixiugegegege  
    OP
       Jan 16, 2021
    @taogen 我百度一手,谢谢
    nvkou
        3
    nvkou  
       Jan 16, 2021 via Android
    Java 的话第一反应是 stream. map. groupingby
    Python 的话我估计也会这么做
    大不了先拿 firstletter 的集合,再用这个集合过滤到不同组。也就是先建立键,再通过键过滤值
    eggshell
        4
    eggshell  
       Jan 16, 2021
    用 itertools.groupby
    xiaoming1992
        5
    xiaoming1992  
       Jan 16, 2021 via Android
    就用 for in 也行吧
    wzwwzw
        6
    wzwwzw  
       Jan 16, 2021
    from itertools import groupby

    before_data = {
    "child": [
    {"f_brandname": "奔驰", "f_pyfirstletter": "B", "seriesname": "载货车"},
    {"f_brandname": "北奔重卡", "f_pyfirstletter": "B", "seriesname": "载货车"},
    {"f_brandname": "福田欧曼", "f_pyfirstletter": "F", "seriesname": "载货车"},
    {"f_brandname": "江铃汽车", "f_pyfirstletter": "J", "seriesname": "载货车"},
    ]
    }

    after_data = {"child": {}}
    for j, i in groupby(before_data["child"], key=lambda x: x["f_pyfirstletter"]):
    if j not in after_data["child"]:
    after_data_example["child"][j] = []
    for k in i:
    after_data_example["child"][j].append(k)

    print(after_data_example)
    zyx199199
        7
    zyx199199  
       Jan 16, 2021   ❤️ 2
    ···
    from itertools import groupby

    {k: list(v) for k,v in groupby(data['child'], key=lambda x: x["f_pyfirstletter"])}
    ```
    yixiugegegege
        8
    yixiugegegege  
    OP
       Jan 16, 2021
    @eggshell 卧槽,解决了,老哥,谢谢!!!
    my8100
        9
    my8100  
       Jan 16, 2021 via iPhone
    from collections import defaultdict

    child_dict = defaultdict(list)
    for d in data["child"]:
    child_dict[d["f_pyfirstletter"]].append(d)

    assert {"child": child_dict} == target_data
    yixiugegegege
        10
    yixiugegegege  
    OP
       Jan 16, 2021
    @wzwwzw 谢谢老哥的代码,终于解决了哭😭
    yixiugegegege
        11
    yixiugegegege  
    OP
       Jan 16, 2021
    @zyx199199 谢谢老哥解决了,喜极而泣,祝福本月无 bug,无迫于
    yixiugegegege
        12
    yixiugegegege  
    OP
       Jan 16, 2021
    @my8100 谢谢老哥,❤️你,爱你😭!
    imn1
        13
    imn1  
       Jan 16, 2021
    new = {'child': {x["f_pyfirstletter"]: [] for x in d["child"]}}
    [new['child'][x["f_pyfirstletter"]].append(x) for x in d["child"]]

    下划线为空格
    d 为源字典,new 为结果
    imn1
        14
    imn1  
       Jan 17, 2021
    # 13 “下划线为空格”不需要
    原来是用 for 的,有缩进,后来改成列表表达式,不需要缩进了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1143 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 23:16 · PVG 07:16 · LAX 16:16 · JFK 19:16
    ♥ Do have faith in what you're doing.