簡體   English   中英

如何分別訪問嵌套字典的每個值?

[英]How do I access each value of a nested dictionary separately?

我正在嘗試學習 python 字典,我的問題是如何分別訪問嵌套字典的每個值?

例如:

dist = {
    "9541258" :{"First" : "Barack",
                "Last"  : "Obama",
                "Age"   : "61",
                "DOB"   : "08/4/1961",
                "Fav_Co": "Dark Blue"
                }
}

這里的關鍵是“9541258”,據我了解的值是“First”:“Barack”,“Last”:“Obama”......等等。

現在我正在嘗試從用戶輸入向字典中添加更多內容,因此我需要分別訪問每個值,即 First、Last、Age、DOB、Fav_color,以便我可以根據用戶輸入將其添加到字典中。

到目前為止,我已經嘗試過了(我正在打印值而不是添加只是為了查看和了解每個變量包含的內容)

for keys, values in (dist.items()):
    print("Id\t:\t"+keys)
    for v1, v2 in values.items():
        print(v1 +"\t:\t"+v2)

但是, v1 和 v2 包含所有值,如 print(v1) 中的輸出; First Last Age DOB Fav_col

我也試過這個,print(v1[0]),但它只輸出每個值的第一個字母,即 FLADF

我了解根據此代碼 V1 是 First Last Age DOB Fav_col

V2 是 Barack Obama 61 08/4/1961 深藍色

那么如何分別訪問 Barack, Obama, 61, 08/4/1961?

ps 為這么長的解釋道歉

引用您的評論,因為這確實是問題的症結所在:

就像用戶輸入這個一樣: "Sam Reed 22 01/02/2000 Green"

我想將這些值添加到字典中,在它已經擁有的數據庫之上,如下所示: Id: ##### First: Sam Last: Reed Age: 22 DOB: 01/02/2000 Fav_Col: Green

使用split()拆分用戶的輸入,以便您可以從中構建一個新字典(使用鍵列表壓縮):

>>> new_entry = "Sam Reed 22 01/02/2000 Green"
>>> dist["######"] = dict(zip(("First", "Last", "Age", "DOB", "Fav_Co"), new_entry.split()))
>>> from pprint import pprint
>>> pprint(dist)
{'######': {'Age': '22',
            'DOB': '01/02/2000',
            'Fav_Co': 'Green',
            'First': 'Sam',
            'Last': 'Reed'},
 '9541258': {'Age': '61',
             'DOB': '08/4/1961',
             'Fav_Co': 'Dark Blue',
             'First': 'Barack',
             'Last': 'Obama'}}

您也可以考慮用dataclass替換您的字典,這為您提供了一種通過簡單地傳遞值列表來構造新條目的更簡單方法(因為可以將它們指定為位置 arguments 的屬性和順序在 class 本身中定義):

>>> from dataclasses import dataclass
>>> @dataclass
... class Person:
...     First: str
...     Last: str
...     Age: str
...     DOB: str
...     Fav_Co: str
...
>>> {"######": Person(*new_entry.split())}
{'######': Person(First='Sam', Last='Reed', Age='22', DOB='01/02/2000', Fav_Co='Green')}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM