跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 迫于逻辑实在理不清了, Python 求助
未分類
5 2 月 2021

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

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

資深大佬 : yixiugegegege 6

{
“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)

  • 資深大佬 : taogen

    没写过 Python 。不过把对象数组变成哈希数组,不会很难吧

  • 主 資深大佬 : yixiugegegege

    @taogen 我百度一手,谢谢

  • 資深大佬 : nvkou

    Java 的话第一反应是 stream. map. groupingby
    Python 的话我估计也会这么做
    大不了先拿 firstletter 的集合,再用这个集合过滤到不同组。也就是先建立键,再通过键过滤值

  • 資深大佬 : eggshell

    用 itertools.groupby

  • 資深大佬 : xiaoming1992

    就用 for in 也行吧

  • 資深大佬 : wzwwzw

    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

    ···
    from itertools import groupby

    {k: list(v) for k,v in groupby(data[‘child’], key=lambda x: x[“f_pyfirstletter”])}
    “`

  • 主 資深大佬 : yixiugegegege

    @eggshell 卧槽,解决了,老哥,谢谢!!!

  • 資深大佬 : my8100

    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

    @wzwwzw 谢谢老哥的代码,终于解决了哭

  • 主 資深大佬 : yixiugegegege

    @zyx199199 谢谢老哥解决了,喜极而泣,祝福本月无 bug,无迫于

  • 主 資深大佬 : yixiugegegege

    @my8100 谢谢老哥,❤️你,爱你

  • 資深大佬 : imn1

    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

    # 13 “下划线为空格”不需要
    原来是用 for 的,有缩进,后来改成列表表达式,不需要缩进了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具