繁体   English   中英

如何从字典中提取特定值?

[英]How to extract a specific value from a dictionary?

我写了一个代码,它给了我一个一千行的 .txt 文件作为输出。 我只想提取时间。 例如,对于下面的行,它应该提取"52 mins"

{
    "destination_addresses": [
        "1000 Bd Sainte-Anne, Saint-Charles-Borrom\u00e9e, QC J6E 6J2, Canada"
    ],
    "origin_addresses": [
        "Montreal, QC H2M 1L5, Canada"
    ],
    "rows": [
        {
            "elements": [
                {
                    "distance": {
                        "text": "70.2 km",
                        "value": 70233
                    },
                    "duration": {
                        "text": "52 mins",
                        "value": 3105
                    },
                    "status": "OK"
                }
            ]
        }
    ],
    "status": "OK"
}

我该怎么做? 在我的原始代码中,我尝试使用['duration'][0]['text']

print(*distances['duration'][0]['text'], sep="\\n")

但它给了我这个错误:

print(*distances['duration'][0]['text'], sep="\n")
TypeError: list indices must be integers or slices, not str

我认为你应该有这样的东西:

data = {'destination_addresses': ['1000 Bd Sainte-Anne, Saint-Charles-Borromée, QC J6E 6J2, Canada'], 'origin_addresses': ['Montreal, QC H2M 1L5, Canada'], 'rows': [{'elements': [{'distance': {'text': '70.2 km', 'value': 70233}, 'duration': {'text': '52 mins', 'value': 3105}, 'status': 'OK'}]}], 'status': 'OK'}
print(data['rows'][0]['elements'][0]['duration']['text'])

看起来您正在混淆字典结构并试图像字典一样访问数组项。

正如您所说,您有一千行,因此假设您有多行和每行中有多个元素,并且您想要访问持续时间 - > 文本,您可以像这样迭代它们并应用任何必要的条件:

data = {'destination_addresses': ['1000 Bd Sainte-Anne, Saint-Charles-Borromée, QC J6E 6J2, Canada'], 'origin_addresses': ['Montreal, QC H2M 1L5, Canada'], 'rows': [{'elements': [{'distance': {'text': '70.2 km', 'value': 70233}, 'duration': {'text': '52 mins', 'value': 3105}, 'status': 'OK'}]}], 'status': 'OK'}

for row in data['rows']:
    for element in row['elements']:
         print(element['duration']['text'])

或者在您当前的字典中,它可以简单地打印为

print(data['rows'][0]['elements'][0]['duration']['text'])

在我看来,你没有很好地解释任务,你让用户感到困惑

首先任务中上面显示的字典实际上是一个包含你的文本文件的字符串

在这种情况下,如果您阅读文本文件的内容并尝试以您编写的方式获取元素,则会出现错误,例如:

with open('C:/Users/user/Desktop/readme.txt') as f:
    distances = f.readlines()

print(distances['rows'][0]['elements'][0]['duration']['text'])

错误:
打印(距离['行'][0]['元素'][0]['持续时间']['文本'])

类型错误:列表索引必须是整数或切片,而不是 str

  1. 例如,您应该使用eval()函数将字符串转换为字典。 Python 的eval()允许您从基于字符串或基于编译代码的输入评估任意 Python 表达式。

     with open('C:/Users/user/Desktop/readme.txt') as f: distances = f.read() distances_ = eval(distances) print(distances_['rows'][0]['elements'][0]['duration']['text'])
  2. 或者你可以使用json.loads()

    您可以使用python的json库加载的内置函数轻松地将python字符串转换为字典。

     import json with open('C:/Users/user/Desktop/readme.txt') as f: distances = f.read() distances_ = json.loads(distances) print(distances_['rows'][0]['elements'][0]['duration']['text'])

根据评论编辑:

with open('C:/Users/user/Desktop/readme.txt', 'r') as f:
for line in f:
    if 'duration' in line :
        print(next(f).split("\"")[3])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM