0

我对 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"

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

4

3 回答 3

1

resque 的生成器表达式:

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

因此,遍历所有字典,并找到与您要查找的day匹配的第一个字典。date一旦找到匹配项,此循环就会停止。

于 2013-01-14T21:41:42.467 回答
1

你能控制你的数据结构吗?它似乎以适合次优查找的方式构建。

我会这样构造它:

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

然后您的查找很简单:

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

于 2013-01-14T21:46:31.523 回答
0

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

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

然后你可以直接索引到它

myDict["SomeMetric"]["day"]["2013-01-02"]
于 2013-01-14T21:48:16.060 回答