我有一段PHP代码,我试图将其移植到Python,我不确定如何在没有引用的情况下工作。在Python中动态编辑字典树
本质上它是一个像树一样工作的配置类,每个键可以有一个简单的值,或者它自己的一组键和值。部分类需要能够设置树的一个特定部分,而不必为根密钥发送完整的新字典。
{ "caching": { "enabled": true }}
例如,以上可以是简单的配置。并调用下面的代码将假
Config.set('caching:enabled', false);
改变真为了在PHP中做到这一点我用引用
class Config
{
private static $aValues;
public static function set($key, $value)
{
if(strpos($key, ':')) {
$aKeys = explode(':', $key);
$iCount = count($aKeys);
} else {
$aKeys = array($key);
$iCount = 1
}
$mData = &self::$aValues
for($i = 0; $i < $iCount; ++$i)
{
if(!isset($mData[$aKeys[$i])) {
$mData[$aKeys[$i]] = array();
}
$mData = &$mData[$aKeys[$i]];
if($i == ($iCount - 1)) {
$mData = $value;
}
}
}
}
但如果我尝试做同样的事情在Python
_dmValues = dict()
def set(key, value):
global _dmValues
if key.find(':'):
aKey = key.split(':')
iCount = len(key)
else:
aKey = (key,)
iCount = 1
mData = _dmValues;
for i in range(0, iCount):
if key[i] not in mData.keys():
mData[key[i]] = dict()
mData = mData[key[i]]
if i == (iCount - 1):
mData = value
它不起作用,mData是正确的值,但自从我写入它,它不再是一个参考。
我该如何去做这件事? Python甚至有可能,或者我应该重新编写我的逻辑并放弃一个完美的端口?
什么是全球'_dmValues'? – Marcin 2015-02-23 22:57:32
@Marcin这是一个模块全局的字典。我已经修复了这个例子,谢谢你指出:) – 2015-02-24 15:17:56