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

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 字典中按 value 合并,有没有简单的写法?
未分類
24 8 月 2020

Python 字典中按 value 合并,有没有简单的写法?

Python 字典中按 value 合并,有没有简单的写法?

資深大佬 : css3 7

我太笨了,就是各种 for

把 tmp 按其 value 去重(取第一个), ret 为结果

tmp = {     "a": [         {"a1": "tom"},         {"a2": "jery"},         {"a3": "jery"},         {"a4": "cao"},         {"a5": "cao"},     ],     "b": [         {"b1": "lily"},         {"b2": "lily"},         {"bn": "jack"},     ] }  ret = {     "a": [         {"a1": "tom"},         {"a2": "jery"},         {"a4": "cao"}     ],     "b": [         {"b1": "lily"},         {"bn": "jack"}     ] } 

我自己半天写了这一坨,着实费劲,有没有简单的写法

大佬有話說 (20)

  • 資深大佬 : cyspy

    反着放到 dict 里再取出来

  • 資深大佬 : lybcyd

    如果不同的 key 有相同的 value,该保留哪一个呢?

  • 主 資深大佬 : css3

    @lybcyd 就第一个吧

  • 主 資深大佬 : css3

    测试了一下,我这一坨还有 bug

  • 主 資深大佬 : css3

    @css3 就是不同 keykey 的 value 可以允许重复

    tmp = {
    “a”: [
    {“a1”: “tom”},
    {“a2”: “jery”},
    {“a3”: “jery”},
    {“a4”: “cao”},
    {“a5”: “cao”},
    ],
    “b”: [
    {“b1”: “lily”},
    {“b2”: “lily”},
    {“bn”: “jack”},
    {“bb”: “tom”}
    ]
    }

    ret = {
    “a”: [
    {“a1”: “tom”},
    {“a2”: “jery”},
    {“a4”: “cao”}
    ],
    “b”: [
    {“b1”: “lily”},
    {“bn”: “jack”},
    {“bb”: “tom”}
    ]
    }

  • 資深大佬 : ruyu

    “`py
    [(k, [(n, m) for m, n in dict([reversed(next(iter(i.items()))) for i in v]).items()]) for k, v in tmp.items()]
    “`

    这样?

  • 資深大佬 : ruyu

    忘了转成 dict 了. 那就这样?

    dict([(k, dict([(n, m) for m, n in dict([reversed(next(iter(i.items()))) for i in v]).items()])) for k, v in tmp.items()])

  • 資深大佬 : Death

    平时 python 写的不多,试着写了一下

    “`
    ret={key:list(reversed([{v:k} for k,v in {y:x for d in reversed(val) for x,y in d.items()}.items()])) for key,val in tmp.items()}
    “`

  • 資深大佬 : djFFFFF

    这个结构太奇怪了,字典套列表再套只会有一个元素的字典是什么操作,字典套字典不行吗?

  • 資深大佬 : ipwx

    其实主你有没有发现,一行写法更难读。。。

    所以一步一步做是坠好的。

  • 資深大佬 : Trim21

    封装成个函数用的时候也是一行(强行

  • 資深大佬 : BiteTheDust

    应该反过来存储 合理存放数据结构很重要

  • 資深大佬 : billgreen1

    [
    {“a1”: “tom”},
    {“a2”: “jery”},
    {“a3”: “jery”},
    {“a4”: “cao”},
    {“a5”: “cao”},
    {“a6”: “jery”},
    ],

    这种情况如何处理?@主

  • 主 資深大佬 : css3

    @css3 @cyspy @lybcyd @ruyu @Death @djFFFFF @ipwx @Trim21 @BiteTheDust @billgreen1
    感谢各位,我等下挨个试试,嘿嘿

  • 主 資深大佬 : css3

    @billgreen1
    按里边字典的 value 去重就行,保留第一个
    [
    {“a1”: “tom”},
    {“a2”: “jery”},
    {“a4”: “cao”},
    ],

  • 資深大佬 : skinny

    不要在复杂数据结构和逻辑下写所谓的一行代码,看上去高大上,实际难读难以理解没卵用,先不提以后再读和维护时的酸爽,写的时候你也多浪费了很多脑细胞和时间。

  • 資深大佬 : ipwx

    @skinny 我也是这个观点(如果是纯 python 处理代码)

    但反过来,如果要处理几十万行几百万行这种,python 就超慢的,不得不诉诸于 pandas 那种。就会是另一种感觉了

  • 資深大佬 : zunsgm

    @skinny
    @ipwx
    @ruyu
    初学者,大佬们能分解下不?

  • 資深大佬 : ipwx

    @zunsgm 你自己的那个版本改改不就行了?

    Python 字典中按 value 合并,有没有简单的写法?

  • 資深大佬 : wwf

    def unpack(lst):
    value_set = set()
    new_lst = []
    for i in lst:
    for k, v in i.items():
    if not value_set:
    value_set.add(v)
    new_lst.append(i)
    if v in value_set:
    continue
    value_set.add(v)
    new_lst.append(i)
    return new_lst

    ret = {}
    for k, v in tmp.items():
    ret[k] = unpack(v)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

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

51la

4563博客

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