将Python字典转换为嵌套字典

时间:2018-10-25 13:14:54

标签: python dictionary

我对python字典和嵌套字典有疑问。如果我有这样的字典:

data = {'abc': ['aaa', 'bbb', 'ccc'], 'def': ['ddd', 'eee', 'fff']}

我能以某种方式将这本词典中的列表转换为词典吗? 这样输出将是:

data = {'abc': {'aaa', 'bbb', 'ccc'}, 'def': {'ddd', 'eee', 'fff'}}

我是Python的新手,只是想了解嵌套字典及其工作方式。预先谢谢你!

4 个答案:

答案 0 :(得分:1)

如果要使用集合字典,则只需使用字典理解即可:

{key:set(value) for key,value in data.items()}

答案 1 :(得分:0)

包含dict的dict的语法为

data = {
    'abc': {'aaa':1, 'bbb':2, 'ccc':42}, 
    'def': {'ddd':45, 'eee':"Monty", 'fff':None}, # this trailing comma is Pythonic
    }

所问的问题是一个包含集合的字典,它是完全有效和有用的。

如果您的主要目的是像if 'aaa' in data['abc']:中那样确定包含或不存在,并且不将任何值与内部键相关联,则可以使用包含集合(而不是列表)的字典。 (在将集合添加到Python之前,程序员使用的dict的所有值都设置为任意且不相关的值,例如1None

如果您希望能够存储通过外键和内键访问的值(如data['aaa']['ddd'] = "I'm new here"),则可以使用包含dict的dict,并且当然仍然可以测试if 'ddd' in data['aaa']:

答案 2 :(得分:0)

data = {'abc': {'aaa', 'bbb', 'ccc'}, 'def': {'ddd', 'eee', 'fff'}}

是无效的python字典。 Python字典采用key:value对形式

您上面的词典中当前拥有的是组词典,而不是词典词典。

您可以做的是添加一些“虚拟”键以从列表转换为字典。 例如下面的代码:

data = {'abc': ['aaa', 'bbb', 'ccc'], 'def': ['ddd', 'eee', 'fff']}
dict2 = {}

i = 0
for key, value in data.items():
    dict2[key] = {}
    for element in value:
        dict2[key][i] = element
        i += 1
    i = 0

print dict2

将为您提供以下输出(这是一个嵌套字典):

{'abc': {0: 'aaa', 1: 'bbb', 2: 'ccc'}, 'def': {0: 'ddd', 1: 'eee', 2: 'fff'}}

答案 3 :(得分:0)

只需使用set来完成此任务:

data = {'abc': ['aaa', 'bbb', 'ccc'], 'def': ['ddd', 'eee', 'fff']}

b = {}
for key, value in data.items(): 
  b[key] = set(value)

print(b)

输出:

{'abc': {'ccc', 'bbb', 'aaa'}, 'def': {'fff', 'ddd', 'eee'}}