Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dictionary.get每个键有多个值-不匹配_Python_Python 2.7_Dictionary - Fatal编程技术网

Python Dictionary.get每个键有多个值-不匹配

Python Dictionary.get每个键有多个值-不匹配,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我想从一个字典中检索一个值,其中键有多个值。在某些情况下,没有键匹配,因此我想返回None。使用单值键作为字典是很容易的。获取(键,无),但是使用每个键的多个值有什么简单的方法呢 import datetime test = { u'ID1': {'End Date': None, 'Start Date': datetime.datetime(2014, 9, 22, 0, 0)}, u'ID2': {'End Date': None, 'Start Date': dateti

我想从一个字典中检索一个值,其中键有多个值。在某些情况下,没有键匹配,因此我想返回
None
。使用单值键作为
字典是很容易的。获取(键,无)
,但是使用每个键的多个值有什么简单的方法呢

import datetime
test = {
    u'ID1': {'End Date': None, 'Start Date': datetime.datetime(2014, 9, 22, 0, 0)},
    u'ID2': {'End Date': None, 'Start Date': datetime.datetime(2014, 9, 18, 0, 0)}
}


print test.get('ID1','Start Date',None)
print test.get('ID3','Start Date',None)

您有一个嵌套字典,需要执行两次查找。不过,您可以创建一个函数来完成所需的功能

def getNestedDict(d, key1, key2, default):
    result1 = d.get(key1)
    if result1 is None:
        return default
    else:
        return result1.get(key2, default)

print getNestedDict(test, 'ID1', 'Start Date', None)
或:


None
get
的默认值。换句话说,只需调用
d.get(key1)
什么是key2不存在?可能更容易检查键是否存在更明确的注释,通过示例显示键1和键2是什么。这可以简化为
returnd.get(key1,{}).get(key2,默认值)
可能更好的方法是将键设置为元组,如
test[“ID1”,“End Date”]=None
,然后
test.get((“ID1”,“结束日期”),无)
。需要澄清的是:字典的键没有多个值;而是在数据结构中有嵌套的dict,每个级别需要一个键。只需检查键是否存在I是否真的像第一个开始日期一样,但不明白为什么它不返回。它能返回一个字符串吗?您知道这方面的任何文档吗?
是键不存在时
.get()
的默认返回值。如果您不希望
,只需使用您想要的任何其他值即可。
test.get('ID1', {}).get('Start Date')
try:
    return test['ID1']['Start Date']
except KeyError:
    return None