簡體   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