通过在Python中引用相同dict级别中的另一个键值来查找键值

时间:2013-01-14 21:38:53

标签: python dictionary key

我对Python很陌生,所以我很难用恰当的术语来描述我的问题。 基本的想法是我有一个具有以下结构的字典:

myDict = 
"SomeMetric":{
    "day":[
        {"date": "2013-01-01","value": 1234},
        {"date": "2013-01-02","value": 5678},
        etc...

我想提取日期已知的“价值”。所以我想:

myDict["SomeMetric"]["day"]["value"] where myDict["SomeMetric"]["day"]["date"] = "2013-01-02"

有没有一个很好的单行方法,没有迭代整个字典,因为我的字典要大得多,而且我已经迭代了它,所以我宁愿不做嵌套的iteritems。

3 个答案:

答案 0 :(得分:1)

生成器resque的表达式:

next(d['value']
    for d in myDict['SomeMetric']['day']
    if d['date'] == "2013-01-02")

因此,循环遍历所有day词典,找到与您正在寻找的date匹配的第一个词典。一旦找到匹配,此循环就会停止。

答案 1 :(得分:1)

您是否可以控制数据结构?它似乎是以这样一种方式构建的,这种方式可以用于次优查找。

我会这样构建它:

data = { 'metrics': { '2013-01-02': 1234, '2013-01-01': 4321 } }

然后你的查询就是:

data['metrics']['2013-01-02']

答案 2 :(得分:0)

你能改变结构吗?如果可以,您可能会发现将day列表更改为将日期作为键和值作为值的字典更加容易,因此

myDict = {
"SomeMetric":{
    "day":{
        "2013-01-01": 1234,
        "2013-01-02": 5678,
        etc...

然后你可以直接用

索引它
myDict["SomeMetric"]["day"]["2013-01-02"]