[英]Values from nested dictionary
更新:如何訪問嵌套字典中的值,其中一個需要兩個鍵,第一個查找內部字典,第二個查找該 key2 處的值。
python 如何訪問嵌套字典中的值,有兩個鍵? 或者我必須重組字典/創建單獨的字典?
例如,我想訪問
['d5']['raw_file']
['append_dir_to_filename']
所有“拳頭鍵”的值,例如g7, d5, a9
列表項
config = {
'g7': {},
'd5': {},
'a9': {},
}
config['g7']['append_dir_to_filename'] = 1,
config['g7']['raw_file'] = ('cr2', 'jpg', 'mp4'),
config['d5']['append_dir_to_filename'] = 1,
config['d5']['raw_file'] = ('nef', 'jpg', 'avi'),
config['a9']['append_dir_to_filename'] = 1,
config['a9']['raw_file'] = ('mp4', 'jpg', 'avi')
在構建嵌套字典方面,這將是每 (1) 個相機的復雜性。 總共有 10 種相機類型,目標是在一次批量滑動中從這些相機的媒體文件中重命名、排序、提取信息等:
config['d5']['append_dir_to_filename'] = 1
config['d5']['device_name'] = 'Nikon-D5'
config['d5']['raw_file'] = ('nef', 'jpg', 'avi')
config['d5']['sup_file'] = ('jpg', 'wav')
config['d5']['to_else_file'] = ('avi')
config['d5']['timestamp'] = ('lwt')
config['d5']['md5'] = 1
config['d5']['code1'] = 'FAR'
config['d5']['gps'] = 1
您可以通過與分配值相同的方式訪問這些值:
print(config['g7']['append_dir_to_filename'])
print(config['d5']['append_dir_to_filename'])
print(config['a9']['raw_file'])
...
要訪問嵌套字典中的值,您需要兩個鍵:第一個key1
用於查找內部字典,第二個用於查找key2
處的值。
要訪問所有“拳頭鍵”(例如g7
、 d5
、 a9
的鍵['append_dir_to_filename']
的值,您必須遍歷config
,這將獲得key1
,並在所需位置讀取值:
for key1 in config:
print(config[key1]['append_dir_to_filename'])
(感謝@MartijnPieters 在評論中的建議)如果您要做的只是查看值,則最好循環遍歷 dict.values() 並保存重復的 config[key1]:
for inner in config.values():
print(inner['append_dir_to_filename'])
您有嵌套字典。 您的外部字典鍵都引用了另一個字典,該字典也有鍵。 Python 允許您將表達式鏈接到那里。
因此,要訪問特定的內部值,首先要訪問外部字典:
config['d5']
這會生成另一個字典對象,您只需將另一個[...]
鍵訪問表達式應用於該結果:
config['d5']['raw_file']
如果需要訪問所有嵌套字典上的相同鍵,則需要循環:
for nested in config.values():
print(nested['append_dir_to_filename'])
這里nested
是對config
字典中每個嵌套字典的引用。
一個更復雜的例子可能是打印出所有外部鍵,其中內部字典中的值的條件成立。 就像打印'append_dir_to_filename'
為1
所有鍵一樣:
for name, nested in config.items():
if nested['append_dir_to_filename'] == 1:
print(name)
dict.items()
允許您遍歷所有(鍵、嵌套字典)對,然后簡單地將該嵌套值再次視為另一個字典對象來測試這些值。
如果您要做的只是跟蹤關於同質屬性集的信息(多個條目的所有值都相同),請考慮使用自定義類(您可以在其中添加方法)或collections.namedtuple()
生成的類來跟蹤這些領域:
from collections import namedtuple
ConfigEntry = namedtuple('ConfigEntry', 'append_dir_to_filename raw_file')
config = {
'g7': ConfigEntry(1, ('cr2', 'jpg', 'mp4')),
'd5': ConfigEntry(1, ('nef', 'jpg', 'avi')),
'a9': ConfigEntry(1, ('mp4', 'jpg', 'avi')),
}
# printing a specific value
print(config['d5'].raw_file)
# printing the same value for each entry
for entry in config.values():
print(entry.append_dir_to_filename)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.