我必须使用嵌套字典。我是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'
答案 0 :(得分:0)
您可以这样写:
data = {}
data['apple'] = {'tree':{'red':{'small':{'cheap': 2}}}}
之后,您可以将内容添加到类似
的图层中data['apple']['tree']['red']['small']['expensive'] = 4
答案 1 :(得分:0)
使用dict.setdefault
例如:
data = {}
data.setdefault('apple', {}).setdefault('tree', {}).setdefault('red', {}).setdefault('small', {}).setdefault('cheap', 2)
print(data)
# --> {'apple': {'tree': {'red': {'small': {'cheap': 2}}}}}
答案 2 :(得分:0)
这里的区别是一个称为 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的原因之一:-)