【问题标题】:get total sum of counts of repeating key in nested dictionary获取嵌套字典中重复键的总计数
【发布时间】:2018-08-02 11:10:25
【问题描述】:

基本上我有这样的数据框

   col1           col2         col3    col4
1. 554862122    55110385224      PR    26                                    
2. 5242700637   55110385236      CO    246
3. 560297164    55110385250      CO    109
4. 5651138615   55110385266      PR    26
5. 5242699687   55110385289      CO    109

我把它转换成这样的字典

{554862122: {55110385224:  {'PR 26': 2})},
5242699687: {55110385289:  {'CO 109': 6}),
554862121: {55110385224:  {'PR 26': 3})}" 

但现在我想要这个但没有循环

{'PR 26':[5,[554862122,55110385224],[554862121,55110385224]],
'CO 109':[6,[5242699687,55110385289]]}

【问题讨论】:

  • 目标是否始终处于嵌套级别 2?你自己尝试了什么?你到底想要什么结果?一本字典?打印输出?我投了反对票,因为这个问题不清楚且费力。
  • 好的,既然您更改了所需的输出,那么单个 5 来自哪里? (编辑:啊,我明白了,它是 2 和 3 的总和)
  • 告诉我们你已经尝试了什么。
  • 我已经用循环完成了这个,但我想要没有循环
  • @timegb 如果你有我的问题你有什么解决办法

标签: python dictionary data-science


【解决方案1】:

您可以使用嵌套循环遍历子字典并使用dict.setdefault 初始化输出字典中的子列表:

d = {
    554862122: {55110385224:  {'PR 26': 2}},
    5242699687: {55110385289:  {'CO 109': 6}},
    554862121: {55110385224:  {'PR 26': 3}}
}
o = {}
for k, v in d.items():
    for l, w in v.items():
        for m, x in w.items():
            o[m][0] = o.setdefault(m, [0])[0] + x
            o[m].append([k, l])
print(o)

这个输出:

{'PR 26': [5, [554862122, 55110385224], [554862121, 55110385224]], 'CO 109': [6, [5242699687, 55110385289]]}

【讨论】:

  • 我可以在没有循环的情况下这样做吗
  • 没有。由于您的 dicts 是如何嵌套的,因此没有循环就无法做到这一点。为什么你不想要一个循环?
  • 因为我有很多数据而且我需要很多时间
  • 您应该使用更好的数据结构来进行输入。实际上,您只需遍历所有 dict 项和子 dict 项即可获得内部值。
  • 如果你所有的 sub-dicts 只有一个项目,你应该先将它们全部展平。使其成为元组列表,例如[(554862122, 55110385224, 'PR 26', 2), (5242699687, 55110385289, 'CO 109', 6), ...].
猜你喜欢
  • 2017-01-07
  • 2013-08-04
  • 2021-05-10
  • 1970-01-01
  • 2021-02-05
  • 2022-12-10
  • 2021-09-03
  • 2013-02-19
  • 1970-01-01
相关资源
最近更新 更多