簡體   English   中英

使用嵌套值切換嵌套字典鍵的Pythonic方法

[英]Pythonic way of switching nested dictionary keys with nested values

簡而言之,我正在使用如下結構的嵌套字典:

nested_dict = {'key1':{'nestedkey1': 'nestedvalue1'}}

我試圖找到一種用嵌套值切換鍵的pythonic方法,所以它看起來像這樣:

nested_dict = {'nestedvalue1':{'nestedkey1': 'key1'}}

我也試圖重命名嵌套的鍵值,所以最終字典看起來像這樣:

nested_dict = {'nestedvalue1':{'NEWnestedkey1': 'key1'}}

這比我正在使用的更接近:

original_dict = {
    'buford': {'id': 1},
    'henley': {'id': 2},
    'emi': {'id': 3},
    'bronc': {'id': 4}
}

我希望它看起來像這樣:

new_dict = {
    1: {'pet': 'buford'},
    2: {'pet': 'henley'},
    3: {'pet': 'emi'},
    4: {'pet': 'bronc'}
}

有沒有辦法使用字典理解在一行中執行此操作? 我試圖在這里得到基礎知識,避免使用像itertools這樣的東西。

您可以使用字典理解來實現這一點,在構建它時“交換”事物:

new_dict = {v['id']: {'pet': k} for k, v in original_dict.items()}

要將它擴展為for循環,它看起來像:

new_dict = {}
for k, v in original_dict.items():
  new_dict[v['id']] = {'pet': k}

請注意,這兩種情況顯然都依賴於'id'值是唯一的,或者每次出現都會覆蓋密鑰。

對於更通用的解決方案,您可以嘗試這樣做:

def replace(d, change_to = 'pet'):
  return {b.values()[0]:{change_to:a} for a, b in d.items()}

輸出:

{1: {'pet': 'buford'}, 2: {'pet': 'henley'}, 3: {'pet': 'emi'}, 4: {'pet': 'bronc'}}

暫無
暫無

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

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