假设connectionDetails是一个Python字典,那么重构这样的代码的最好,最优雅,最"pythonic"的方法是什么?
if "host" in connectionDetails:
    host = connectionDetails["host"]
else:
    host = someDefaultValue
是否有一种简单或优雅的方法来合并两个哈希而不会覆盖重复的键?
也就是说,如果密钥存在于原始哈希中,我不想更改其值.
我有一个字典,并希望删除所有有空值字符串的键.
metadata = {u'Composite:PreviewImage': u'(Binary data 101973 bytes)',
            u'EXIF:CFAPattern2': u''}
做这个的最好方式是什么?
for k, v in d.iteritems():
    if type(v) is dict:
        for t, c in v.iteritems():
            print "{0} : {1}".format(t, c)
我正在尝试遍历字典并打印出值不是嵌套字典的所有键值对.如果值是字典,我想进入它并打印出其键值对...等.有帮助吗?
编辑
这个怎么样?它仍然只打印一件事.
def printDict(d):
    for k, v in d.iteritems():
        if type(v) is dict:
            printDict(v)
        else:
            print "{0} : {1}".format(k, v)
完整测试案例
字典:
{u'xml': {u'config': {u'portstatus': {u'status': u'good'}, u'target': u'1'},
      u'port': u'11'}}
结果:
xml : {u'config': {u'portstatus': {u'status': u'good'}, u'target': u'1'}, u'port': u'11'}
背景: Trevor正在使用标准算法的PHP实现:获取一组主要的默认名称 - 值对,并更新这些名称 - 值对,但仅限于那些实际存在有效更新值的名称 - 值对.
问题:默认情况下,PHP array_merge的工作方式如下......它将使用空值覆盖非空值.
$aamain   =   Array('firstname'=>'peter','age'=>'32','nation'=>'');
$update   =   Array('firstname' => '','lastname' => 'griffin', age =>'33','nation'=>'usa');
print_r(array_merge($aamain,$update));    
/*
Array
(
    [firstname] =>           // <-- update set this to blank, NOT COOL!
    [age] => 33              // <-- update set this to 33, thats cool
    [lastname] => griffin    // <-- update added this key-value pair, thats cool
    [nation] => usa          // <-- update filled in a blank, thats cool.
)
*/
问题:执行array_merge的代码行最少的方法是什么,其中空白值永远不会覆盖已存在的值?
print_r(array_coolmerge($aamain,$update));    
/* …