簡體   English   中英

使用列表中的值遍歷字典

[英]Iterating through a dictionary using values from a list

我正在處理一些數據,這些數據的每個記錄都有不斷變化的鍵。 我已經從每條記錄中收集了一個主鍵列表,並將它們存儲在列表中。 然后,我想遍歷列表以使用try catch拉取適當的值,但是由於列表項中的項目為str而字典為dict

例如,請注意嵌套鍵的可能性。 否則我的方法會簡單得多:

records = [{
  "id": 2017215,
  "name": "foo bar"
  "campaign": {
    "id": 161,
    "name": "Historical Data Campaign"
  }
},
{
  "id": 2017215,
  "name": "foo bar",
  "last_updated": "2018-01-01",
  "campaign": {
    "id": 161,
    "name": "Historical Data Campaign"
  }
}]

keys = [ ['id'], ['name'], ['campaign'], ['campaign']['id'], ['campaign']['name'], ['last_updated'] ]

for record in records:
  for key in keys:
    print (record + key) # assumption was this would generate "record['id']" but errors due to mismatched types.

我是否正在使它變得比所需的難? 最大的問題是密鑰可以在記錄之間變化,並且在某些情況下,數據中存在嵌套的密鑰。

首先,如果您按照以下方式進行操作,則可以使上述代碼段起作用

records = # ...
keys = [ ('id',), ('name',), ('campaign',), ('campaign', 'id'), ('campaign', 'name'), ('last_updated',) ]

for record in records:
    for key_tuple in keys:
        obj = record
        for key in key_tuple:
            obj = record[key]
        print(obj)

您的摘要中的一個問題是['campaign']['id']類的元素的出現。 Python假定['campaign']部分是文字列表定義,然后['id']為該列表建立索引(但不能,因為它不是整數)。

更籠統地說,我建議研究.items()方法來查找字典。 您可以將以上代碼片段轉換為

for record in records:
    for key, value in record.items():

        # to handle nested dictionaries
        if isinstance(value, dict):
            for subkey, subval in value.items():
                print(subkey, subval)
        else:
            print(key, val)

這樣可以處理所有鍵,但是如果嵌套字典的層次超過兩個級別,則可能需要將其重新實現為遞歸函數。

暫無
暫無

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

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