将默认dict更改为嵌套字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将默认dict更改为嵌套字典相关的知识,希望对你有一定的参考价值。

我有一个字典(如下所示),值是默认字典,内部值是列表。我试图将这个字典变成另一个具有相同更高级别密钥的字典和一个嵌套字典,该字典包含相同的内部密钥和列表中“4”值的总和。

例如,第一个条目的预期输出是{'google':{'dog':1,'cat':2}}

{'google': defaultdict(<type 'list'>, {'dog': [4, 0], 'cat': [4, 4, 0]}), 'ibm': defaultdict(<type 'list'>, {'dog': [4], 'bird': [0]}), 'kaspersky': defaultdict(<type 'list'>, {}), 'amazon': defaultdict(<type 'list'>, {}), 'facebook': defaultdict(<type 'list'>, {}), 'sony': defaultdict(<type 'list'>, {}), 'microsoft': defaultdict(<type 'list'>, {}), 'apple': defaultdict(<type 'list'>, {})}

我使用下面的代码尝试这样做,但我得到错误“TypeError:列表索引必须是整数,而不是str”。

def swords_neg(dictionary):
    for key,value in dictionary.iteritems():
        company_sent_dict_three[key] = []
        for i,j in dict(value).iteritems():
            for sent in j:
                company_sent_dict_three[key][i] += sent

    print company_sent_dict_three
答案

您可以使用以下嵌套的dict comprehension

{
    k: {k_: sum(x==4 for x in v_) for k_, v_ in v.items()} 
    for k, v in dictionary.items()
}
# {'google': {'dog': 1, 'cat': 2}, 
#  'ibm': {'dog': 1, 'bird': 0}, 
#  'kaspersky': {}, 
#  'amazon': {}, 
#  'facebook': {}, 
#  'sony': {}, 
#  'microsoft': {}, 
#  'apple': {}}

k, v是外部dict的键值对,k_, v_是每个内部defaultdict的键值对。 sum是一个方便的工具,通过4计算每个最里面列表的sum(x==4 for x in v_).的出现次数

以上是关于将默认dict更改为嵌套字典的主要内容,如果未能解决你的问题,请参考以下文章

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

覆盖继承的默认支持对象(如 dict、list)的嵌套 JSON 编码

我有嵌套的dict变量列表,需要将其转换为Json对象的dict变量类型

Android 日期选择器片段更改为微调器

Android:将“ViewPager”动画从片段更改为片段

通过 add_job_flow_steps 将嵌套字典传递给 EMR