Python 如何定义嵌套字典

Python 如何定义嵌套字典,python,dictionary,Python,Dictionary,我必须使用嵌套字典。我是perl用户。。。所以python对我来说很难。但我开始学习python。当我用perl和python编写下面这样的代码时。perl工作得很好,但python不行。 Python是管理许多数据树的好语言。你能帮我控制这种数据树吗。。?我只知道perl风格 perl ## working well $data{apple}{tree}{red}{small}{cheap} = 2; $data{banana}{tree}{yellow}{big}{cheap} = 3; $

我必须使用嵌套字典。我是perl用户。。。所以python对我来说很难。但我开始学习python。当我用perl和python编写下面这样的代码时。perl工作得很好,但python不行。 Python是管理许多数据树的好语言。你能帮我控制这种数据树吗。。?我只知道perl风格

perl

## working well
$data{apple}{tree}{red}{small}{cheap} = 2;
$data{banana}{tree}{yellow}{big}{cheap} = 3;
$data{grape}{tree}{pupple}{small}{expensive} = 1;
$data{orange}{tree}{orange}{small}{cheap} = 5;

foreach fruite ( sort keys %data) {
  foreach source ( sort keys %{$data{$fruite}}){
    print "$fruite $source\n";
  }
}
python

 data = { }
 data['apple']['tree']['red']['small']['cheap'] = 2
 # not working well..

#ERROR message in python:
#Traceback (most recent call last):
# File "text_parsing.py", line 97, in <module>
# data['apple']['tree']['red']['small']['cheap'] = 2
#KeyError: 'apple'
data={}
数据['apple']['tree']['red']['small']['cheap']=2
#工作不好。。
#python中的错误消息:
#回溯(最近一次呼叫最后一次):
#文件“text_parsing.py”,第97行,在
#数据['apple']['tree']['red']['small']['cheap']=2
#关键错误:“苹果”

您可以这样写:

data = {}
data['apple'] = {'tree':{'red':{'small':{'cheap': 2}}}}
之后,您可以向图层添加内容,如

data['apple']['tree']['red']['small']['expensive'] = 4

你可以这样写:

data = {}
data['apple'] = {'tree':{'red':{'small':{'cheap': 2}}}}
之后,您可以向图层添加内容,如

data['apple']['tree']['red']['small']['expensive'] = 4

使用
dict.setdefault

Ex:

data = {}
data.setdefault('apple', {}).setdefault('tree', {}).setdefault('red', {}).setdefault('small', {}).setdefault('cheap', 2)
print(data)
# --> {'apple': {'tree': {'red': {'small': {'cheap': 2}}}}}

使用
dict.setdefault

Ex:

data = {}
data.setdefault('apple', {}).setdefault('tree', {}).setdefault('red', {}).setdefault('small', {}).setdefault('cheap', 2)
print(data)
# --> {'apple': {'tree': {'red': {'small': {'cheap': 2}}}}}

这里的区别是一个名为autovivification的Perl特性。如果您使用不存在的密钥访问Perl数据结构,那么Perl将为您创建该密钥。这意味着您可以使用类似您的代码非常轻松地构建复杂的数据结构。尽管您的每一条语句都提到了几个不存在的键,但Perl只是理解了您的意思并为您创建了结构

其他编程语言不这样做。通常一次只能向数据结构添加一个级别的新键

在Python中实现这一点的一种方法是创建一个数据结构文本并将其分配给顶级键

data = {}
data['apple']  = {'tree':{'red':{'small':{'cheap': 2}}}}
data['banana'] = {'tree':{'yellow':{'big':}{'cheap: 3}}}}
# etc...
Perl的等价物是:

my %data;
$data{apple}  = {tree => { red => { small => { cheap => 2}}}};
$data{banana} = {tree => { yellow => { big => { cheap => 3}}}};
# etc...

这就是为什么我更喜欢Perl而不是Python的原因之一:-)

这里的区别是一个名为自动激活的Perl特性。如果您使用不存在的密钥访问Perl数据结构,那么Perl将为您创建该密钥。这意味着您可以使用类似您的代码非常轻松地构建复杂的数据结构。尽管您的每一条语句都提到了几个不存在的键,但Perl只是理解了您的意思并为您创建了结构

其他编程语言不这样做。通常一次只能向数据结构添加一个级别的新键

在Python中实现这一点的一种方法是创建一个数据结构文本并将其分配给顶级键

data = {}
data['apple']  = {'tree':{'red':{'small':{'cheap': 2}}}}
data['banana'] = {'tree':{'yellow':{'big':}{'cheap: 3}}}}
# etc...
Perl的等价物是:

my %data;
$data{apple}  = {tree => { red => { small => { cheap => 2}}}};
$data{banana} = {tree => { yellow => { big => { cheap => 3}}}};
# etc...

这就是为什么我更喜欢Perl而不是Python的原因之一:-)

你是说嵌套的吗?我稍微重新格式化了Perl代码,使其更具可读性。{Apple }{Re}}{小}{便宜} /代码> AKA <代码> $数据{Apple } > {树} > {红}>{小}>{便宜} /代码>为<代码>((($数据{苹果}//{{})>树} //{{})-> {红色}//{}})-{{}}}}}}}} }{便宜}请考虑以后自己做这件事。谢谢Autovivices,<代码> $DATA
s/neshed/nested/g
你的意思是嵌套的吗?我稍微重新格式化了你的Perl代码,使它更具可读性。{便宜} /代码> AKA <代码> {苹果} > {树}>{红}>{小}>{便宜} /代码>为<代码>((($DATA}//= {{})>树} //{{})-> {红色}//{}})-{{小}//{}}})-> {便宜}< /Calp> <代码> S/NESHOD/NETST/G请考虑以后自己做这件事。感谢Autovivices,<代码> ${{Apple }{树}{Re}}{小}。