下面的Python(2.5)例子都是源于《Diveinto Python》,以下的Matlab代码都是在Matlab7.0.1下运行通过的:
Python中定义Dictionary:
>>> d ={"server":"mpilgrim","database":"master"}
Matlab中创建struct:
>> d = struct('server','mpilgrim','database','master')
在Python中通过key来查找value:
>>> d["server"]
'mpilgrim'
>>> d["database"]
'master'
在Matlab中通过字符串形式的fieldname来查找value(Using Dynamic Field Names):
>> d.('server')
ans =
mpilgrim
>> d.('database')
ans =
master
在Python中不能通过value来获取key:
>>> d["mpilgrim"]
Traceback (innermost last):
File "<interactive input>", line 1, in ?
KeyError: mpilgrim
在Matlab中也不行(不能通过value来查找fieldname):
>> d.('mpilgrim')
??? Reference to non-existent field'mpilgrim'.
在Python中修改已经存在的key的value:
>>> d["database"] ="pubs"
>>> d
{'server': 'mpilgrim', 'database': 'pubs'}
在Matlab中修改已经存在的field的value:
>> d.('database')='pubs'
d =
server: 'mpilgrim'
database: 'pubs'
在Python中添加新的key-value对:
>>> d["uid"] ="sa"
>>> d
{'server': 'mpilgrim', 'uid': 'sa','database': 'pubs'}
在Matlab中添加新的field:
>> d.('uid')='sa'
d =
server: 'mpilgrim'
database: 'pubs'
uid: 'sa'
Python的key是大小写敏感的,Matlab的field name也是大小写敏感的(不举例子了)。
在Python中删除Dictionary的元素:
>>> d
{'database': 'master', 'uid': 'sa','server': 'mpilgrim'}
>>> del d['uid']
>>> d
{'database': 'master', 'server':'mpilgrim'}
在Matlab中删除stuct的field:
>> d=struct('database', 'master','uid', 'sa', 'server', 'mpilgrim')
d =
database: 'master'
uid: 'sa'
server: 'mpilgrim'
>> d=rmfield(d,'uid')
d =
database: 'master'
server: 'mpilgrim'
在Python中删除Dictionary所有元素:
>>> d.clear()
>>> d
{}
在Matlab中删除struct所有field:
>> d=struct()
d =
1x1 struct array with no fields.
但是两者(Python的Dictionary和Matlab中的struct)还是有许多差异的,例如:
在Python中,key可以使用多种类型:
>>> d[42] = "douglas"
>>> d
{'server': 'mpilgrim', 'uid': 'sa','database': 'master',
42: 'douglas', 'retrycount': 3}
在Matlab中,甚至不能用数字作为fieldname:
>> d.123='123'
??? d.123='123'
|
Error: Missing MATLAB operator.
>> d.(123)='123'
??? Argument to dynamic structure referencemust evaluate to a valid field name.
以上是对Python的Dictionary和Matlab的struct的简单比较。